Apach Zeppelin搭配Livy接入kafka使用spark streaming处理

来源:互联网 发布:oracle 数据库权限角色 编辑:程序博客网 时间:2024/05/19 14:37

一.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 不同版本兼容性导致的报错:

 

java.lang.IncompatibleClassChangeError: Implementing class

 

.......

 

17/05/08 21:44:04 INFO ApplicationMaster: Final app status: FAILED, exitCode: 15, (reason: User class threw exception: java.lang.IncompatibleClassChangeError: Implementing class)

主要原因在于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数据源即可运行:



0 0