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.sh
或conf/zeppelin-site.xml
中進行修改
2. 設置Spark Interpreter
主要就是master的設置。
在zeppelin interpreter中設置spark master
的參數,目前支持所有的spark master :
-
mesos
模式中使用mesos://zk://zk1:2181,zk2:2182,zk3:2181/mesos
或mesos://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.url
和livy.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:
可以通過修改源碼LivyHelper
中initializeSpark
方法,將初始化的SQLContext改為HiveContext,重新編譯即可。