问题

近期在研究Hudi。在开发环境下使用基本上没有什么问题。结果跑到生产线时遇到各类奇怪的问题。其中影响时间最长的还是NoSuchMethod的问题。其错误如下。

ava.util.concurrent.CompletionException: java.lang.NoSuchMethodError: org.apache.hadoop.hdfs.client.HdfsDataInputStream.getReadStatistics()Lorg/apache/hadoop/hdfs/DFSInputStream$ReadStatistics;
04-06-2024 15:17:22 CST hudi-test INFO -     at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:273)
04-06-2024 15:17:22 CST hudi-test INFO -     at java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:991)

在网络上搜索一翻后,发现这个问题非常的共性。产生的主要原因还是在于Hudi这一版本引用的HBase是2.4.9,该版本的Hbase引用的Hadoop是2.x版本导致与生产线的3.x Hadoop不兼容。重新编译就好了。

问题解决

重新编译HBase

# 编译HBase
git clone https://github.com/apache/hbase
git checkout rel/2.4.9
mvn clean install -Denforcer.skip -DskipTests -Dhadoop.profile=3.0 -Psite-install-step -Dos.arch=x86_64

这里特别说明我使用的是m1 chip macbook,直接编译是会报错的。需要改一下系统:-Dos.arch=x86_64,当然网友也有其他的方法进行处理。这里简单点处理更直接一些。

重新编译Hudi

git clone https://github.com/apache/hudi.git
git checkout release-0.14.1
#此时需要修改pom.xml

这里特别说明,必须要checkout release-0.14.1这个版本。

调整POM

注释掉relocation这一行,如下图示:

51c0bcab3787e3dce1e542e826a29729_MD5.jpeg

执行编译

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

编译完成

编译的结果在这个文件夹里面:

packaging/hudi-spark-bundle/target/hudi-spark3.3-bundle_2.12-0.14.1.jar

至此再上传后,运行HudiTest,就成功了。

引用

标签: 大数据

添加新评论