flink1.10 提交java sql ddl程序异常

  flink1.10对ddl这块支持比较完善,最近用java写了个ddl kafka的demo测试。在ide本地环境中执行没有问题,但将任务打包提交的flink 集群时提交就报错,无法执行,异常如下: flink1.10 提交java sql ddl程序异常_第1张图片

看异常好像是ddl写错了,本地运行正常,说明没有问题。使用flink sql-client客户端测试报一样的错,flink lib下没有对应的包,将包放到lib下,使用sql-client执行正常,说明提交集群时没有加载到包,实际上包已经打进去了。怀疑是flink类加载机制造成的。重新提交任务,依然失败,这次异常变了成如下:

看异常怀疑包冲突,排了janino包,提交还是出现这个异常。找到项目中引用的CompilerFactoryFactory这个类查看异常处发现代码对不上,少了很多行代码,于是将flink lib下对应的jar取下来反编译发现代码对上了,将本地项目中对应的flink-table-planner,flink-table-planner-blink包不打包进去,使用flink lib下自带的jar,重新提交任务正常运行了。为什么自己打包的flink-sql-connector-kafka包无法加载到,心中还是疑惑。为了解决这个使用阿里开源的arthas查看类加载方式。在flink web ui上查看刚提交运行正常的任务运行在哪台服务器上,使用arthas查看类加载,执行命令 java -jar arthas-boot.jar ,选择对应进程

flink1.10 提交java sql ddl程序异常_第2张图片

执行 classloader命令发现运行的程序加载到了打进去的sql-kafka的jar包,怀疑是使用flink客户端提交时客户端加载flink-sql-connector-kafka的包需要放到lib目录下才能加载,我使用的不是后台进程,客户端还在,使用arthas查看客户端类加载:

flink1.10 提交java sql ddl程序异常_第3张图片

使用的是AppClassloader类加载器从lib目录下加载,至此疑惑解开。

你可能感兴趣的:(flink,个人总结)