开发者社区> 问答> 正文

CliFrontend 未优先加载用户jar包中的class

组件版本 Hadoop 2.7.3,flink 1.9.1 ,elasticsearch6.5。 

该问题的起源是因为程序我的用户程序用Jackson,并依赖了Elasticsearch rest client ,在Yarn集群上提交任务的时候出现了如下异常: 

java.lang.NoSuchFieldError: FAIL_ON_SYMBOL_HASH_OVERFLOW 

at org.elasticsearch.common.xcontent.json.JsonXContent. (JsonXContent.java:57) 

后上网查询后推论有可能是jackson版本问题,于是打印了类加载路径: 

--------------------------main class jackson class load before run------------------------------ 

file:/usr/**/hadoop/lib/jackson-databind-2.2.3.jar 

果然是从hadoop的classpath下加载了2.2.3版本 

之后查看flink run命令入口程序 

CliFrontend#bulidProgram line 799 

PackagedProgram#PackagedProgram line 221 

JobWithJars#BuildUserCodeClassLoad line 142  

return FlinkUserCodeClassLoaders.parentFirst(urls, parent); 

默认使用parentFirst,根据官方文档里面描述的反向类加载,应该是首先从classpath下加载Class,而不是从user jar包中加载类。 

请问如何修改此处的类加载顺序,优先从user jar 中加载clas*来自志愿者整理的flink邮件归档

展开
收起
CCCC 2021-12-02 15:08:18 630 0
1 条回答
写回答
取消 提交回答
  • 1.9.2 和 1.10 上已经修复此问题,修改可参考

    https://issues.apache.org/jira/browse/FLINK-13749*来自志愿者整理的FLINK邮件归档

    2021-12-02 15:48:23
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
APP加固新方向 --混淆和瘦身 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载