升到Flink版本到1.15.0
由于业务要求需要把Flink从1.13.1升级到1.15版本;原本想着很快就能完成升级,结果还是碰到了不少问题,此处Mark一下。
一、升级前准备
首先回顾一下使用了Flink的什么能力;
1、使用了DataStream、TableAPI、FlinkSQL;
2、Connector方面,使用了Jdbc、Kafka、UpsertKafka、Hive几个Connector;
3、Format方面,使用了Json、Csv、Avro、Debezium;新业务上还需要支持Ogg格式;
确定计划为:下载Flink release安装包,根据之前的业务和新增的业务补充其他JAR包,最后对目前的应用代码进行Flink版本的更改;
二、升级步骤
1、Flink release直接上官网下载就好,1.15版本的安装包甚至默认有TableAPI和FlinkSQL的JAR包了;
2、Format方面也很顺利,直接把包下载下来放到lib目录下就OK;
3、去官网下载flink-connector-kafka-1.15.0.jar、flink-sql-connector-hive-2.2.0_2.12-1.15.0.jar,flink-connect-jdbc等JAR包并上传到flink1.15的lib目录下;
4、更新代码的Flink版本,在POM中把Flink改为1.15.0版本,重新打包放到集群上运行。
三、碰到问题
问题1:Flink1.15.0已经必须在JAVA11环境下环境了,不再像以前1.13能在JAVA8和11之间兼容。
解决:在conf目录下的flink-conf.yaml通过env.java.home指定你JAVA11的JAVA_HOME。
问题1:Flink1.15.0部分的JAR包命名与1.13命名有区别
以上为1.13版本的包
以上为1.15版本的包
像table的JAR包,从原来的flink-table-blink…….改为flink-table-planner…和flink-table-runtime……
connector包从原来带着scala版本的改为不带scala版本了。
解决:找JAR包时注意清楚版本和命名就OK了.
问题2:修改代码工程的Flink版本后报错Provider org.apache.flink.table.module.hive.HiveModuleFactory not a subtype
解决:由于pom中通过profiles保留了1.13和1.15两个配置,找包的时候会找到1.13的旧包,如下图后面直接就注释了1.13的配置
问题3:缺少HADOOP_CLASSPATH
此处我的解决方法是直接在flink脚本的第一行加入export HADOOP_CLASSPATH=
hadoop classpath
问题4:报错Exception in thread “Thread-5” java.lang.IllegalStateException: Trying to access closed classloader. Please check if you store classloaders directly or indirectly in static fields. If the stacktrace suggests that the leak occurs in a third party library and cannot be fixed immediately, you can disable this check with the configuration ‘classloader.check-leaked-classloader’.
虽然报错但其实不影响运行
解决:flink-conf.xml添加classloader.check-leaked-classloader: false
问题5:提交JAR包,用FLINKSQL写kafka时,报错
Caused by: java.lang.ClassNotFoundException: org.apache.kafka.clients.consumer.ConsumerRecord
解决:加入kafka-clients-2.8.1.jar
问题6:Could not find any factory for identifier ‘hive’ that implements ‘org.apache.flink.table.planner.delegation.ParserFactory’ in the classpath.
解决如下图:
问题7:
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.mapred.JobConf
在lib目录下添加hadoop-mapreduce-client-core-3.0.0.jar
版权归原作者 小梦叶 所有, 如有侵权,请联系我们删除。