一.Zeppelin的基础设置可以参考上篇博文
二.接入kafka数据源
参考这个例子,接入kafka源需要先配置依赖,点击zeppelin界面右上角设置(齿轮标记),进入interpreter设置,再点击蓝色interpreter设置,在spark interpreter设置中添加依赖
总共需要添加下面五个依赖:
kafka_2.11-0.8.2.2.jar
kafka-clients-0.8.2.2.jar
metrics-core-2.2.0.jar
spark-streaming-kafka-0-8_2.11-2.1.0.jar
zkclient-0.10.jar
需要注意的是scala版本和kafka版本,spark只支持0.8+和0.10+的kafka
参考kafka文档在本地启动最简单的zookeeper和producer,使用crontab向kafka输出dummy数据,可以在zeppelin中读到对应的内容如下:
三.在livy中接入kafka数据源
在livy中接入kafka关键的不同在于依赖的设置,zeppelin中设置livy需要的kafka依赖并不起作用:
在配置livy的kafka依赖时,像使用 spark interpreter时一样在zeppelin中添加依赖并不起作用,会产生类似下面的错误:
<console>:23: error: object kafka is not a member of package <root>
或者
java.lang.NoClassDefFoundError: org/I0Itec/zkclient/serialize/ZkSerializer
at kafka.consumer.Consumer$.create(ConsumerConnector.scala:94)
at org.apache.spark.streaming.kafka.KafkaReceiver.onStart(KafkaInputDStream.scala:100)
原因还是在于没有找到依赖:
在livy中载入依赖有两种方式:
一种是将需要的jar包放入 $livy_home/rsc-jars(对应livy.io下载的预编译版) 或者 $livy_home/rsc/target/jars/ (对应手动编译版)
二是在$SPARK_HOME/conf/spark-defaults.conf 中设置spark.jars变量
另外一个需要注意的问题是编译livy时的spark版本:
livy 0.4 snapshot版本与spark 不同版本兼容性导致的报错:
主要原因在于livy 4.0使用了SparkListener,而SparkListener 在spark 2.x中和spark 1.x中是不兼容的的,所以需要根据livy 使用的spark版本学则编译选项,默认是针对spark 1.6编译的.
类似的错误还有
java.lang.NoClassDefFoundError: org/apache/spark/internal/Logging
也是因为spark 2.x 里面不包含上面这个logging类,这个类只存在于spark 1.6
处理完上述问题后接入kafka数据源即可运行: