Flink这问题有人遇到过么?求大神帮忙看看Caused by: java.lang.LinkageError: loader constraint violation: when resolving method "org.apache.flink.runtime.util.HadoopUtils.getHadoopConfiguration(Lorg/apache/flink/configuration/Configuration;)Lorg/apache/hadoop/conf/Configuration;" the class loader (instance of org/apache/flink/util/ChildFirstClassLoader) of the current class, com/ipinyou/cdp/task/flink/event/ParquetOutputFormat, and the class loader (instance of sun/misc/Launcher$AppClassLoader) for the method's defining class, org/apache/flink/runtime/util/HadoopUtils, have different Class objects for the type org/apache/hadoop/conf/Configuration used in the signature
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这个错误是由于类加载器冲突导致的。根据错误信息,引发错误的地方是在 com/ipinyou/cdp/task/flink/event/ParquetOutputFormat 类中调用了 org.apache.flink.runtime.util.HadoopUtils.getHadoopConfiguration(Configuration) 方法。
错误信息指出,com/ipinyou/cdp/task/flink/event/ParquetOutputFormat 类使用的类加载器是 org/apache/flink/util/ChildFirstClassLoader,而 org/apache/flink/runtime/util/HadoopUtils 类中定义该方法的类加载器是 sun/misc/Launcher$AppClassLoader。两者使用了不同的 org/apache/hadoop/conf/Configuration 类对象,导致类加载器约束冲突。
这种错误通常与依赖项、类加载器配置或类路径问题有关。可能的解决方法包括:
1.检查依赖项:确保项目的依赖项正确并与 Flink 版本兼容。这可能涉及升级、降级或排除某些依赖项。
2.类加载器配置:尝试调整类加载器配置以解决冲突。可以尝试使用 Flink 的 env.getParentClassLoader() 方法来获取父类加载器,并在构建 ParquetOutputFormat 实例时将其传递给构造函数。
示例代码:
ClassLoader parentClassLoader = env.getParentClassLoader();
ParquetOutputFormat parquetOutputFormat = new ParquetOutputFormat(configuration, parentClassLoader);
可根据实际情况修改类加载器的获取方式和传递方式。
3.类路径冲突:检查类路径,确保没有重复或冲突的依赖项。某些依赖项可能已经包含在其他依赖项中,导致冲突。
4.版本冲突:检查项目中使用的 Flink 版本与其他依赖项的版本是否一致。不同版本之间可能存在不兼容性。
如果以上方法仍无法解决问题,请提供更多关于 Flink 版本、项目依赖项和代码示例的详细信息,以便更准确地诊断和解决问题。,此回答整理自钉群“【③群】Apache Flink China社区”
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。