请教个Flink问题,从hudi读数据,报错NoSuchMethodError:org.apache.hudi.format.cow.vector.reader.PaequetColumnarRowSplit.getRecord() 使用的包是hudi-flink1.15 什么原因?
先手动把org.apache.hudi.format.cow.vector.reader.PaequetColumnarRowSplit这个类所属jar打印出来, 看一下到底是由哪个依赖引入的冲突吧.Class<?> clazz = Class.forName("com.xxx.xxx.XXX"); # 类名
CodeSource cs = clazz.getProtectionDomain().getCodeSource();
String location = cs.getLocation().getPath(); System.out.println(location); 可以参考这个改一下 ,此回答整理自钉群“【②群】Apache Flink China社区”
这个错误NoSuchMethodError:org.apache.hudi.format.cow.vector.reader.PaequetColumnarRowSplit.getRecord()
表明在运行时,Flink正在尝试调用Hudi的某个方法,但是该方法在Hudi的版本中并不存在或已经被更改。
这个问题可能是由于版本不兼容引起的。可能的情况是:
Flink和Hudi的版本不匹配。你提到的"使用的包是hudi-flink1.15",这可能意味着你的Flink和Hudi版本并不完全兼容。你需要确认你的Flink和Hudi版本是否兼容。
你可能在项目中混用了不同版本的Hudi库。这可能会导致类加载器在运行时加载错误的类版本。你需要检查并确保项目中所有的Hudi依赖都是相同的版本。
解决这个问题的方法是:
确认并更新你的Flink和Hudi版本,使其相互兼容。你可以在Flink和Hudi的官方文档中查找版本兼容性信息。
检查并清理你的项目依赖,确保所有Hudi库的版本都是一致的。你可以使用Maven或Gradle等工具来管理你的项目依赖。
如果问题仍然存在,建议你提供更多的错误信息和上下文,这将有助于更准确地定位问题。
当使用 Apache Flink 读取 Hudi 数据时,如果遇到了 NoSuchMethodError 异常,尤其是指向类似 org.apache.hudi.format.cow.vector.reader.ParquetColumnarRowSplit.getRecord() 这样的方法时,这通常是由于不同版本之间的类库兼容性问题造成的。
根据提供的信息,您正在使用 hudi-flink1.15 这个包集成 Flink 1.15 版本与 Hudi 进行交互。此类错误意味着,在运行时,加载的 Hudi 类库版本与 Flink-Hudi connector 所期望的方法签名不匹配。
解决这个问题的步骤可能包括:
检查项目中使用的 Hudi connector 版本是否确实支持 Flink 1.15 并且与 Hudi core 库兼容。有时候即使 connector 版本正确,也可能因为核心 Hudi 库版本不匹配而导致此类问题。
检查是否存在不同版本的 Hudi 或 Parquet 相关依赖,确保所有的相关库版本统一,不存在版本冲突。
根据 Hudi 官方文档推荐的版本搭配,考虑升级或降级 Flink、Hudi connector 或 Hudi 核心库的版本。
如果是在开发环境中,确保清理旧的 classpath 缓存,重新构建项目以确保加载的是最新的依赖库。
查阅 Apache Hudi 和 Apache Flink 的官方文档,看看是否有提到特定版本组合下的已知问题和解决方案。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。