Spark & Zeppelin

zeppelin 為交互式分析查詢提供了可視化界面。 在zeppelin上使用spark NoteBook,有spark和livy兩種方式。

軟件版本

zeppelin版本:從zeppelin-master編譯(已發布0.6)

spark版本: 1.6.2

livy版本: livy 0.2.0

一. 編譯部署zeppelin

git clone https://github.com/apache/zeppelin.git
cd zeppelin-master
mvn clean package -Pspark-1.6 -Dhadoop.version=2.4.1 -Pyarn -Ppyspark -DskipTests -Pbuild-distr

編譯后的包在 zeppelin-distribution/target 目錄下

二. Spark Interpreter for Apache Zeppelin

1. 配置

設置spark Home

vim conf/zeppelin-env.sh
export HADOOP_CONF_DIR=/usr/install/hadoop
export SPARK_HOME=/usr/install/spark

啟動zeppelin

bin/zeppelin-daemon.sh start

默認通過8080端口訪問zeppelin。可以在conf/zeppelin-env.shconf/zeppelin-site.xml中進行修改

2. 設置Spark Interpreter

主要就是master的設置。

在zeppelin interpreter中設置spark master的參數,目前支持所有的spark master :

  • mesos模式中使用mesos://zk://zk1:2181,zk2:2182,zk3:2181/mesosmesos://host:5050
  • standalone模式中使用spark://master:7077
  • yarn模式中使用yarn-client
  • local模式中使用local[*]

默認參數會從 SPARK_HOME/conf/spark-default.conf中讀取

3. 常見錯誤解決:

spark notebook運行報錯

sc.makeRDD(1 to 100)

com.fasterxml.jackson.databind.JsonMappingException: Could not find creator property with name 'id' (in class org.apache.spark.rdd.RDDOperationScope)

jackson版本沖突導致,zepplin中的版本為2.5,spark使用的為2.4,更換zepplin/lib下jackson-databind的版本重啟即可。

ls zeppelin-0.6.0-bin-all/lib/ | grep jackson
jackson-annotations-2.5.0.jar
jackson-core-2.5.3.jar
jackson-databind-2.5.3.jar

獲取jackson-databind-2.4.4

wget http://central.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.4.4/jackson-databind-2.4.4.jar 

4. 添加外部依賴

spark的外部依賴可以通過 zeppelin-env.sh添加。
spark-default.conf以及zeppelin-env.sh中一些參數的對應關系。

spark-defaults.conf SPARK_SUBMIT_OPTIONS Applicable Interpreter
spark.jars --jars %spark
spark.jars.packages --packages %spark
spark.files --files %pyspark

eg.

export SPARK_SUBMIT_OPTIONS="--jars /usr/install/libs/mysql-connector-java-5.1.34.jar,/usr/install/spark/lib/influxdbSink-byHost.jar"

5. spark Interpreter 目前存在的一些坑

不支持user proxy,意味著所有在notebook上運行的任務提交到集群中的權限都是啟動zeppelin 服務的用戶,存在安全問題。

三. Livy Interpreter for Apache Zeppelin

1. livy的使用

Impersonation機制

livy為多用戶使用同一server提供了代理服務(相當于spark-submit--user-proxy),
需要開啟zeppelin的authentication機制來實現

livy的配置

一般只需要在Interpreters中配置livy.urllivy.spark.master

livy支持所有spark的配置參數,只需要在配置前加入livy前綴即可。

2. livy Interpreter 目前存在的一些坑

1. 404 bad request

每個session存在空閑過期時間(默認為1小時),session過期后,重新使用時會得到該提示。

這個問題在
https://github.com/apache/zeppelin/pull/1184
中有更具體的描述。

這個時候只有新建notebook使用或是重啟livy interpreter解決。

2. %livy.spark%livy.sql默認使用的是sqlContext,%livy.pyspark默認使用的是HiveContext

因此直接使用%livy.sql查詢hive表將會提示

org.apache.spark.sql.AnalysisException: Table not found:

可以通過修改源碼LivyHelperinitializeSpark方法,將初始化的SQLContext改為HiveContext,重新編譯即可。

四. 一些使用界面

這里寫圖片描述
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容