一、组件版本
- hive 2.1.1-cdh6.3.1
- hadoop 3.0.0-cdh6.3.1
- maven 3.6.3
二、maven镜像配置环境配置
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>*,!cloudera-repo-releases</mirrorOf>
</mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central,!cloudera-repo-releases</mirrorOf>
<name>阿里云spring插件仓库</name>
<url>https://maven.aliyun.com/repository/spring-plugin</url>
</mirror>
<mirror>
<id>repo1-maven-org</id>
<mirrorOf>central</mirrorOf>
<name>Repo1 Maven Mirror</name>
<url>https://repo1.maven.org/maven2/</url>
</mirror>
<mirror>
<id>repo2</id>
<name>Mirror from Maven Repo2</name>
<url>https://repo.spring.io/plugins-release/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>UK</id>
<name>UK Central</name>
<url>http://uk.maven.org/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>jboss-public-repository-group</id>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>CN</id>
<name>OSChina Central</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>google-maven-central</id>
<name>GCS Maven Central mirror Asia Pacific</name>
<url>https://maven-central-asia.storage-download.googleapis.com/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>confluent</id>
<name>confluent maven</name>
<url>http://packages.confluent.io/maven/</url>
<mirrorOf>confluent</mirrorOf>
</mirror>
需要注意的是阿里云镜像仓库中没有cloudera的仓库包,cloudera是一个单独的仓库。在hudi0.13.1这版本中已经在pom中引用了仓库不需要在maven中配置,只需要在阿里云镜像库中排除即可。<mirrorOf>*,!cloudera-repo-releases</mirrorOf> 如这样配置,!cloudera-repo-releases 代表排除cloudera-repo-releases的仓库搜索,cdh依赖的包就不会再从阿里云仓库中下载了,也不会报出阿里云镜像中找不到cdh的jar包。
如果上述还是搞不定chd包依赖的问题,可以尝试从chd仓库手动下载安装下载地址如下:
maven安装包命令示例
mvn install:install-file \
-Dpackaging=jar \
-Dclassifier=tests \
-DgroupId=org.apache.hadoop \
-DartifactId=hadoop-hdfs \
-Dversion=3.0.0-cdh6.3.1 \
-Dfile=./hadoop-hdfs-3.0.0-cdh6.3.1-tests.jar
mvn install:install-file \
-Dfile=./hadoop-auth-3.0.0-cdh6.3.1.jar \
-DgroupId=org.apache.hadoop \
-DartifactId=hadoop-auth \
-Dversion=3.0.0-cdh6.3.1 \
-Dpackaging=jar
三、修改hudi编译版本
1、修改pom文件
1.1 根pom文件中修改hadoop和hive为需要的版本
文件路径hudi/pom.xml
1.2 修改hudi/packaging/hudi-flink-bundle/pom.xml
2、执行编译命令
mvn clean install -T 6 -DskipTests -DskipITs -Dcheckstyle.skip=true -Drat.skip=true -Pflink-bundle-shade-hive2
flink版本和spark版本都选择默认,因为我这边都是flink为主要测试点。
3、编译过程会遇到的报错问题
3.1 javax.annotation.concurrent.Immutable 类不存在
解决: 在hudi-sync-common的pom.xml文件中添加依赖包
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>3.0.2</version>
</dependency>
3.2 DistributedFileSystem 类不存在
解决: 在hudi-client/hudi-client-common/pom.xml中添加依赖
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs-client</artifactId>
<version>${hadoop.version}</version>
<scope>provided</scope>
</dependency>
3.3 org.json.JSONObject 抛出异常与捕获问题
解决: hudi-utilities/pom.xml添加依赖
<dependency>
<groupId>com.tdunning</groupId>
<artifactId>json</artifactId>
<version>1.8</version>
</dependency>
出现如上结果,说明编译成功。
如果是在IDEA中build后出现scala代码中一些类不存在而报红警告,可以尝试直接编译。
4、编译过程中排查问题用到的maven命令
mvn dependency:tree -Dincludes=org.apache.hadoop:hadoop-common
mvn dependency:list -DincludeArtifactIds=jsr305
参考博客:
[1] https://7e2hj.com/hudi%e9%9b%86%e6%88%90cdh/
[2] 整合Apache Hudi+Mysql+FlinkCDC2.1+CDH6.3.0_江南独孤客的技术博客_51CTO博客