在写Flink Job的过程中往往会有第三方的依赖,如果是在IDE里开发,我们可以在pom.xml里添加依赖,那么在Zeppelin里如何添加第三方依赖呢?主要有以下两种方法

  • flink.excuetion.packages
  • flink.execution.jars

    flink.execution.packages

    这个配置是我个人比较推荐的配置方式,因为它的实现方式和在 pom.xml 里添加依赖是类似的,会把相应的package和这个package的所有transitive依赖都下载下来放到CLASSPATH里。下面是一个添加kafka connector依赖的例子:
    1. flink.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
    package的格式是这样的 artifactGroup:artifactId:version,如果是多个package,那么每个package用逗号分隔。不过这种方法需要Zeppelin那台机器能访问外网,如果你的机器不能访问外网的话,那就可以考虑使用 flink.execution.jars

更改maven地址

默认情况下 Zeppelin 是从https://repo1.maven.org/maven2 下载依赖,如果你先用其他maven repo,那就需要在 zeppelin-site.xml 里配置 zeppelin.interpreter.dep.mvnRepo, 比如:

  1. <property>
  2. <name>zeppelin.interpreter.dep.mvnRepo</name>
  3. <value>https://maven.aliyun.com/repository/central</value>
  4. </property>

flink.execution.jars

如果你的Zeppelin机器不能访问外网或者你的依赖没有发布在maven repository里,那么这个时候你可以将你依赖的jar放到Zeppelin机器上,然后通过 flink.execution.jars 来指定这些jar(多个jar以逗号分隔)。
下面是一个添加kafka connector的例子:

  1. flink.execution.jars /Users/jzhang/github/flink-kafka/target/flink-kafka-1.0-SNAPSHOT.jar

这个kafka connector的jar是通过下面这个例子build出来的,其他connector可以用类似的方法。

错误的姿势

有些人会喜欢直接把相关的依赖包放到flink/lib下,有时候这样也行,但我个人不建议大家这么做,主要有2个原因:

  1. 放在flink/lib 下会影响所有的flink job,即使你的job不依赖这些jar,这些jar也会被加载,从而增加jar包冲突的可能性,实际情况是每个flink job有各自不同的依赖,所以建议使用上面的2种方法。
  2. 如果你既用了本文的2种方式又把jar放到了flink/lib下面,那么也有可能导致jar冲突,所以再次建议不要把第三方jar放到flink/lib 下,除非万不得已(比如hive integration的hive相关jar)

视频教程

连接kafka数据源

Flink on Zeppelin 14. 连接kafka数据源 .mp4 (39.46MB)

钉钉群+公众号

Flink on Zeppelin 3群钉钉.JPG image.png