I.前言
前两天转了章大的zeppelin系列教程(以下简称“教程”),我也好好的研究学习了一波。
我曾无数次鼓吹基于Jupyter的应用,也相信在未来数据分析领域,他会有自己的一席之地. 对话式的管家服务,真是谁用谁知道...
以下内容摘自“教程”:
下面是Zeppelin和Flink的故事。
Flink问:虽然我提供了多种语言支持,有SQL,Java,Scala还有Python,但是每种语言都有自己的入口,用户很难多种语言混着用。比如在sql-client中只能运行Sql,不能写UDF,在pyflink shell里,只能用python的udf,不能用scala和java的udf。有没有谁能帮我把这些语言全部打通。
Zeppelin答:我可以。
Flink问:我的一个很大的使用场景是实时大屏,但是我一个人办不到,往往需要借助第三方存储,还需要前端开发,有没有谁能让用户不用写前端代码就实现实时大屏
Zeppelin答:我可以。
Flink问:我的Sql已经很强大了,但是用户在sql-client里不能写comment,而且不支持运行多条sql语句,有谁能帮我把这些功能补齐下。
Zeppelin答:我可以。
Flink问:好多初学者说要跑一个flink job实在是太难了,好多东西需要配置,还要学习各种命令行,有没有谁能让用户更容易得提交和管理Flink Job。
Zeppelin答:我可以。
Flink问:Flink Job提交目前只能一个个提交,一个job跑完跑另外一个,有些用户想并行执行多个Flink Job,谁能帮我搞定这个需求?
Zeppelin答:我可以。
Flink问:我有丰富的connector,但是用户每次都要把connector打包到uber jar里,或者copy到flink的lib下,但是这样会把各种connector jar混在一起,容易发生冲突,很难管理,有谁能提供一个干净点的方案?
Zeppelin答:我可以。
II.填坑
Zepplin 0.9版本虽然已经做的足够出色了,但是还是有很多隐含的条件(坑),对新人还是不那么友好的,我在研习“教程”的时候,也就稍微总结了一下:
-
版本:
目前zepplin 0.9 preview 整合flink,只能使用 Apache Flink 1.10.1 for Scala 2.11 ,不能使用scala2.12
-
环境:
实验的话,需要在linux下尝试,windows是不支持,尽管他都有windows下的启动脚本.
-
FLINK_HOME
在interpret里设置FLINK_HOME,指向你的Flink,切记1.10.1 scala2.11版本
-
Kafka Connect Datagen
使用提供的docker镜像来做kafka集群,提供数据,安装docker不在这里说了,可能启动正常,但是没有datagenconnector
说明,docker-compose.yml里这两句没起作用
- ./plugins:/tmp/connect-plugins
- ./data:/tmp/data
执行下面语句就ok了。
setenforce 0
另外,默认配置里
KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://broker:9092'
CONNECT_BOOTSTRAP_SERVERS: '192.168.16.3:9092'
可能不剩下,使用下面语句,找到broker的ip,替换broker
docker exec -it ID/NAMES ip addr
创建kafka connector时,使用官方语句可能不太好事,可以使用UI即本机IP:8000 来进行配置,原文提供的 connect.source.datagen.json 也有些不太好使,我修改了一下,如下:
{
"connector.class": "com.github.xushiyan.kafka.connect.datagen.performance.DatagenConnector",
"tasks.max": "1",
"random.fields": "status:foo|bar|baz, direction:up|down|left|right",
"event.timestamp.field": "event_ts",
"poll.size": "10",
"key.converter.schemas.enable": "false",
"poll.interval.ms": "5000",
"value.converter.schemas.enable": "false",
"topic.name": "generated.events",
"value.converter": "org.apache.kafka.connect.storage.StringConverter",
"message.template": "{\"status\":\"foo\",\"direction\":\"up\"}",
"key.converter": "org.apache.kafka.connect.storage.StringConverter"
}
如下图所示
可以在Topic UI里可以看到数据,就证明这里配置ok了
-
Streaming ETL
记住先执行:
%flink.conf # You need to run this paragraph first before running any flink code. flink.execution.packages org.apache.flink:flink-connector-kafka_2.11:1.10.1,org.apache.flink:flink-connector-kafka-base_2.11:1.10.1,org.apache.flink:flink-json:1.10.1
上面的坑都填好了,就能愉快的玩耍了