玩转大数据Java

Hudi Spark写入出现NoSuchMethod HdfsD

2023-12-26  本文已影响0人  AlienPaul

环境信息

问题背景

Spark 创建Hudi表的时候偶现如下错误:

java.lang.NoSuchMethodError: org.apache.hadoop.hdfs.client.HdfsDataInputStream.getReadStatistics()Lorg/apache/hadoop/hdfs/DFSInputStream$ReadStatistics;

无法成功写入。

问题原因

Hudi的metadata使用HBase的HFile格式存储。然而Hudi默认编译时候使用的HBase相关依赖包支持的Hadoop版本是2.x,和Hadoop 3.x存在兼容问题,导致出现NoSuchMethodError。

解决方案

编译Hudi的时候使用带有Hadoop 3.x依赖的HBase相关包。具体方法如下所示。或者参见Hudi 使用之 HBase Index

首先需要编译HBase。执行:

git clone https://github.com/apache/hbase

进入源代码目录后checkout 2.4.9 tag(因为Hudi依赖的HBase为2.4.9,修改版本号会导致编译报错。不使用HBase Index的话,对于metadata HFile文件写入,使用和集群HBase版本不同的依赖不会有问题)。

git checkout rel/2.4.9

最后执行如下命令编译HBase。需要注意的是必须指定HBase依赖的Hadoop版本为3.0。

mvn clean install -Denforcer.skip -DskipTests -Dhadoop.profile=3.0 -Psite-install-step

到这里HBase编译完毕。接下来编译Hudi。

git clone https://github.com/apache/hudi.git
cd hudi

执行如下命令编译。以Flink 1.15和Spark 3.3为例:

mvn clean package -Dflink1.15 -Dscala2.12 -Dspark3.3 -DskipTests -Pflink-bundle-shade-hive3 -T 4 -Denforcer.skip

编译完毕之后替换原有的hudi-sparkx.x-bundle包,问题解决。

上一篇 下一篇

猜你喜欢

热点阅读