在写Flink Job的过程中往往会有第三方的依赖,如果是在IDE里开发,我们可以在pom.xml里添加依赖,那么在Zeppelin里如何添加第三方依赖呢?主要有以下两种方法
- flink.excuetion.packages
- flink.execution.jars
flink.execution.packages
这个配置是我个人比较推荐的配置方式,因为它的实现方式和在 pom.xml 里添加依赖是类似的,会把相应的package和这个package的所有transitive依赖都下载下来放到CLASSPATH里。下面是一个添加kafka connector依赖的例子:
package的格式是这样的 artifactGroup:artifactId:version,如果是多个package,那么每个package用逗号分隔。不过这种方法需要Zeppelin那台机器能访问外网,如果你的机器不能访问外网的话,那就可以考虑使用 flink.execution.jarsflink.execution.packages org.apache.flink:flink-connector-kafka_2.11:1.10.0,org.apache.flink:flink-connector-kafka-base_2.11:1.10.0,org.apache.flink:flink-json:1.10.0
更改maven地址
默认情况下 Zeppelin 是从https://repo1.maven.org/maven2 下载依赖,如果你先用其他maven repo,那就需要在 zeppelin-site.xml 里配置 zeppelin.interpreter.dep.mvnRepo, 比如:
<property>
<name>zeppelin.interpreter.dep.mvnRepo</name>
<value>https://maven.aliyun.com/repository/central</value>
</property>
flink.execution.jars
如果你的Zeppelin机器不能访问外网或者你的依赖没有发布在maven repository里,那么这个时候你可以将你依赖的jar放到Zeppelin机器上,然后通过 flink.execution.jars 来指定这些jar(多个jar以逗号分隔)。
下面是一个添加kafka connector的例子:
flink.execution.jars /Users/jzhang/github/flink-kafka/target/flink-kafka-1.0-SNAPSHOT.jar
这个kafka connector的jar是通过下面这个例子build出来的,其他connector可以用类似的方法。
错误的姿势
有些人会喜欢直接把相关的依赖包放到flink/lib下,有时候这样也行,但我个人不建议大家这么做,主要有2个原因:
- 放在flink/lib 下会影响所有的flink job,即使你的job不依赖这些jar,这些jar也会被加载,从而增加jar包冲突的可能性,实际情况是每个flink job有各自不同的依赖,所以建议使用上面的2种方法。
- 如果你既用了本文的2种方式又把jar放到了flink/lib下面,那么也有可能导致jar冲突,所以再次建议不要把第三方jar放到flink/lib 下,除非万不得已(比如hive integration的hive相关jar)
视频教程
连接kafka数据源
钉钉群+公众号