前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住给大家分享一下。点击跳转到网站:https://www.captainai.net/dongkelun
前言
如题:记录一个 Hudi HBase 依赖冲突问题及解决方案
版本
- Hudi 0.13.0
- Spark 3.2.3
异常
1 | ERROR Javalin: Exception occurred while servicing http-request |
复现
1 | create table test.test_hudi_table ( |
- 备注:参数:hoodie.cleaner.commits.retained = ‘1’, 是为了更快的复现异常。
详细异常
https://note.youdao.com/s/KkK2m0yR
原因
1、hudi 0.13.0 默认启用 metadata table,之前的版本默认不启用。(HoodieMetadataConfig
)
2、metadata table 使用HBase的HFile格式存储
3、Hudi 依赖 HBASE 2.4.9, HBase 2.4.9 默认依赖 Hadoop 2.x。与我们使用的Hadoop 3.x版本不一致,存在兼容问题,导致依赖冲突:NoSuchMethodError。
解决方法
临时方案
可以先不开启 metadata table
1 | hoodie.metadata.enable=false |
1 | create table test.test_hudi_table ( |
永久方案
重新编译
具体方法为:
1、先编译HBase,编译时指定 Hadoop 3版本,install 本地
2、然后重新打包Hudi
hbase 编译
1 | git clone https://github.com/apache/hbase.git |
备注:由于该冲突依赖类对应的模块为hbase-server,所以在win上编译最后几个模块失败不影响,可以忽略,如果想全部编译通过,可以在Linux上
hudi编译
1、下载 hudi源码,切换到 release-0.13.0 分支1
mvn clean package -DskipTests -Dscala-2.12 -Dspark3.2
2、window编译失败问题可参考:Hudi master 0.13.0-SNAPSHOT Win10 打包异常解决
3、对应的hudi包路径:
hudi\packaging\hudi-spark-bundle\target
hudi\packaging\hudi-utilities-bundle\target