原文:https://my.oschina.net/yjwxh/blog/620368
目前zeppelin最新版本是0.5.6,http://zeppelin.incubator.apache.org/
zepplin是 apache孵化器中的一個項目,但是由於其提供的簡單,易操作的web版交互式以及可視化分析工具,也較爲受歡迎。
本文就先簡單介紹 zeppelin on spark的應用。
下載、安裝zeppelin
zeppelin的啓動 $ZEPPELIN_HOME/bin/zeppelin-dameon.sh start , 默認端口8080,啓動成功後即可在瀏覽器訪問:
Zeppelin在構建的時候就默認將spark構建在了項目內部,因此在啓動zeppelin後,會自動注入SparkContext, SparkSQL實例。默認情況下zeppelin會以本地模式啓用其內部自帶的spark環境,如果你想使用自己部署的spark集羣,那麼就需要做一些簡單的配置:
- 添加SPARK_HOME環境變量,在zeppelin安裝文件conf/zeppelin-env.sh文件中添加 export SPARK_HOME=$spark_home_path
- 在啓動起來的zeppelin web界面的interpreter菜單下,設置spark master屬性。該屬性的設置規則是:
-
- local[*] in local mode
- spark://master:7077 in standalone cluster
- yarn-client in Yarn client mode
- mesos://host:5050 in Mesos cluster
OK ,完成以上配置之後,就可以重新啓動zeppelin,並創建一個新的Notebook, 來測試spark,
因爲zeppelin默認情況下是提供spark上下文環境,所以在編寫spark代碼的時候,不需要加%spark,
首先通過一個 sc.version 來查看spark版本, 注意:默認情況下zeppelin啓動成功以後,並沒有將spark啓動,只有當有spark的操作請求的時候,纔會開始啓動,所以在第一次執行spark請求的時候會比較慢。
如果執行結果顯示出了spark的版本信息,那麼就說明與spark後端執行引擎對接成功了。
在此再額外補充一個可能出現的問題,因爲我在第一次嘗試的時候就出現了,當我執行sc.version的時候報異常:
com.fasterxml.jackson.databind.JsonMappingException: Could not find creator property with name 'id' (in class org.apache.spark.rdd.RDDOperationScope)
通過分析發現該異常的原因是:jackson包版本衝突。
衝突原因:zeppelin 0.5.6使用的jackson版本是2.5.3 ,而spark1.6使用的jackson版本是2.4.4,所以導致json解析的時候異常。
該問題的解決方法就是: 刪除zeppelin安裝文件下lib文件夾中jackson-*2.5.3.jar, 將jackson2.4.4版本的jar包複製到該文件夾下。進行替換。
重啓zeppelin,該問題即可解決。
zeppelin on spark環境已經配置完成,那麼接下來的工作就是 執行spark應用,然後使用zeppelin查看統計分析結果,當然目前用的比較方便的還是spark sql ,下面給出基於zeppelin on spark分析結果展示。
總結: Zeppelin是一個比較讓人驚喜的發現,在發現他之前對於spark的分析結果,我們一般都是通過命令行的方式來查詢,如果要給用戶或者別人演示結果,那就更麻煩了,要不就將就的看看後端命令行結果,要不你就寫個簡單的web ui來進行結果展示。 這樣又會帶來一些問題,每次一個新的需求模型過來都要重新編程,每次一些小的參數變動都要修改代碼。帶來了極大的不方便。 但是自從有了zeppelin,這些問題都能夠很好的解決,並且不用再擔心數據分析結果的展示問題,也爲分析統計的測試帶來很大的方便。
當然Zeppelin目前還處於孵化器階段也有不足的地方,例如一些動態表單的支持還比較少,目前僅僅有文本框和下拉框。
關於Zeppelin更多的功能還在慢慢探索中:
(1) 各種Interpreter的測試,自定義Interpreter的接入方式
(2) zeppelin豐富的展示系統
(3) zeppelin的更多使用場景挖掘等等。