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,重新编译即可。