Flink 免费视频直播课程地址:https://ke.qq.com/course/283798
每个Flink应用程序依赖于一组Flink库。在最低限度,应用程序只依赖Flink api。许多应用程序依赖特定的连接器库(如kafka,cassandra,等等)。Flink运行应用程序时(在分布式部署,或在IDE中测试),Flink运行时库必须是可用的。
与大多数系统运行的用户自定义程序一样,flink有两大类依赖和库。
每一个flink应用程序需要最基本的API依赖。针对maven,你可以使用java代码开发模板或者scala代码开发模板去创建项目并且初始化项目依赖。
当手动创建一个项目的时候,你需要添加以下依赖针对java/scala API。(这里是针对maven的语法提供的依赖配置,其他语法也是类似的,例如Gradle SBT等等 )
java代码依赖
org.apache.flink
flink-java
1.4.1
provided
org.apache.flink
flink-streaming-java_2.11
1.4.1
provided
scala代码依赖
org.apache.flink
flink-scala_2.11
1.4.1
provided
org.apache.flink
flink-streaming-scala_2.11
1.4.1
provided
请注意:所有这些依赖关系都设置的有生效范围
强烈建议使用provided设置生效范围,如果没有提供这个参数,最好的情况是,因此产生的jar变得很大,因为它包含了所有flink核心依赖的代码。最坏的情况是,flink核心依赖项添加到应用程序的jar文件中与你自己集群的依赖版本发生冲突。(这通常是避免通过反向类加载)。
使用IntelliJ请注意:为了使应用程序可以在Intellij IDEA中运行,Flink的依赖应该设置为compile,而不能是provided。否则IntelliJ不会将他们添加到类路径,当执行的时候就会报错NoClassDefFoundError,执行就会失败。为了避免具体指定生效范围,可以添加一个配置文件,来实现在idea中运行的时候,使用compile级别,打包集群运行的时候使用provided级别。
大部分程序需要特殊指定连接器或者类库的依赖才能运行,例如连接到kafka,cassandra等等。这些连接器不是flink核心依赖的一部分,在运行程序的时候必须把依赖添加进来。
下面是一个添加kafka0.10版本连接器的例子
org.apache.flink
flink-connector-kafka-0.10_2.11
1.4.1
我们推荐打包应用程序代码以及所有必须的依赖到一个jar-with-dependencies的应用程序jar包中。这个应用程序jar可以提交到一个运行中的flink集群中或者是添加到flink应用程序容器的镜像中。
使用java/scala项目模板创建的项目默认会把需要的依赖自动的打包到应用程序jar包中,当你执行mvn clean package命令的时候。如果创建项目的时候没有使用这些模板,我们建议添加maven的shade插件来进行打包,可以吧所有必须的依赖都打进去。
请注意:当使用maven吧依赖打包进应用程序jar中的时候,这些应该依赖的scope熟悉必须设置为compile(如果是flink的核心依赖,必须设置scope为provided)
scala版本(2.10,2.11,2.12等)不是互相兼容的,出于这个原因,flink scala2.11 不能适用于使用scala2.12的应用程序。
所有的flink依赖项取决于对应的scala后缀,这个表示使用对应的scala版本进行编译的。例如:flink-streaming-scala_2.11 表示使用scala2.11版本进行编译的。
java程序开发者可以选择任何scala版本,scala开发人员需要选择相匹配的scala版本程序。
详情请参阅构建指南,针对如何构建特定scala版本的flink。
注意:由于scala2.12的重大变化,flink 1.5版本目前只有scala2.11版本。未来会支持2.12。
一般规则:不应该把hadoop的依赖添加到你的应用程序中。(唯一的例外是当使用现有基于Hadoop输入/输出格式与Flink的Hadoop兼容性包装)
如果你想在flink中操作hadoop,你需要在安装flink的时候包含hadoop依赖,而不是把hadoop的依赖添加到flink应用程序中。详情请参阅hadoop设置指南。
这样设计有两个主要原因:
如果你需要Hadoop依赖在测试期间内或开发过程中(例如HDFS访问),请配置这些依赖关系,然后设置scope为test或者provided
建立一个包含所有应用程序JAR依赖项的配置,您可以使用以下定义:
org.apache.maven.plugins
maven-shade-plugin
3.0.0
package
shade
com.google.code.findbugs:jsr305
org.slf4j:*
log4j:*
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
my.prorgams.main.clazz
获取更多大数据资料,视频以及技术交流请加群: