1.9.2 和 1.10 上已经修复此问题,修改可参考 https://issues.apache.org/jira/browse/FLINK-13749
Best, tison. aven.wu <[email protected]> 于2020年3月3日周二 下午2:04写道: > 组件版本 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.<clinit>(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 中加载class > > Best > Aven > >
