背景
最近,我司决定将flink 从1.7.2升级到1.8.1。但是,flink 1.8.1运行jar,基于on yarn的模式就会报错。
问题以及解决
运行日志,一开始
Setting HADOOP_CONF_DIR=/etc/hadoop/conf because no HADOOP_CONF_DIR was set.
然后就出现Could not build the program from JAR file。但是用1.7.2的版本就可以跑通,于是发现1.8.1版本中,flink不会自带hadoop的jar了,需要自己去官网下载 https://flink.apache.org/downloads.html
可以选择对应版本,我是2.5版本的hadoop,选择了2.6.5。然后将下载下来的jar放入,flink的jar目录下(我这边是/var/flink-1.8.1/lib)
再运行,就会出现各种ClassNotFoundException。
包括:
ClassNotFoundException: com.sun.jersey.core.util.FeaturesAndProperties
ClassNotFoundException: org.glassfish.jersey.internal.RuntimeDelegateImpl
ClassNotFoundException: javax.ws.rs.ext.MessageBodyReader
这里整理了一下,所需要的jar
<!-- <!– https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-common –>-->
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-common</artifactId>
<version>2.27</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-core -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.19.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-client -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.19.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api -->
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0.1</version>
</dependency>
将上述的依赖放入IDE中,让maven去下载,然后在去对应的maven仓库去拿下载好的jar,再上传上去,即可。
最后将上传的jar,都变为777权限(这步,不知道需不需要,反正我是都改了)
问题得到解决,可以正常运行了。