记录一次flink程序类转换异常
·
今天更新flink程序时候报了一个异常,如下图:

第一反应就是看代码是否有未判断类型的强转,找到代码对应位置

确认了在强转前做了类型判断了,所以只能是怀疑val类的oracle.sql.TIMESTAMP和强转的(oracle.sql.TIMESTAMP)类不一样?
接着debug时候加了jvm参数 -D -verbose:class 将程序中加载的所有类以及类所在的路径都打印出来,找oracle.sql.TIMESTAMP,结果如下:

果然oracle.sql.TIMESTAMP类被load了两次,一次是blobStore-xxxx,一次是自己程序xxx.jar加载,到这里如果熟悉flink的朋友们应该就知道为啥了, blobStore-xxx路径是flink的作业缓存服务路径,这里同时涉及到flink作业的类加载部分内容。
通过flink官方文档介绍看到该问题有3种解决方案:
- 将oracle的jar包上传到flink的lib目录下
- 配置classloader.resolve-order: parent-first选项
- 配置classloader.parent-first-patterns-additional将jdbc驱动类都添加到这里
上述方法都测试过都不会再报那个错误了,最终我选择了第3种方法,后续如果有别的类也需要使用parent-first加载方式都可以直接再后边添加。
更多推荐
所有评论(0)