目录
修改组件版本
修改源码兼容hadoop3
手动安装kafka依赖
解决spark模块依赖冲突
1)修改hudi-spark-bundle的pom文件,排除低版本jetty,添加hudi指定版本的jetty:
2)修改hudi-utilities-bundle的pom文件,排除低版本jetty,添加hudi指定版本的jetty:
编译过程中的报错及操作
hudi官方文档详见:Overview | Apache Hudi
hudi项目clone到本地,拉取0.12.0分支,修改最外层pom文件,更改各组件版本如下
hadoop | 3.0.0-cdh6.3.1 |
hive | 2.1.1-cdh6.3.1 |
spark | 2.4.0-cdh6.3.1 |
flink | 1.14.3 |
hudi | 0.12.0 |
org.apache.hudi.common.table.log.block.HoodieParquetDataBlock 的110行,添加第二个参数null
重新编译hudi需要的kafka依赖如下:
下载链接:http://packages.confluent.io/archive/5.3/confluent-5.3.4-2.12.zip
安装到本地库
mvn install:install-file -DgroupId=io.confluent -DartifactId=common-config -Dversion=5.3.4 -Dpackaging=jar -Dfile=./common-config-5.3.4.jar
mvn install:install-file -DgroupId=io.confluent -DartifactId=common-utils -Dversion=5.3.4 -Dpackaging=jar -Dfile=./common-utils-5.3.4.jar
mvn install:install-file -DgroupId=io.confluent -DartifactId=kafka-avro-serializer -Dversion=5.3.4 -Dpackaging=jar -Dfile=./kafka-avro-serializer-5.3.4.jar
mvn install:install-file -DgroupId=io.confluent -DartifactId=kafka-schema-registry-client -Dversion=5.3.4 -Dpackaging=jar -Dfile=./kafka-schema-registry-client-5.3.4.jar
hudi/packaging/hudi-spark-bundle/pom.xml,在382行的位置,修改如下
${hive.groupid}
hive-service
${hive.version}
${spark.bundle.hive.scope}
guava
com.google.guava
org.eclipse.jetty
*
org.pentaho
*
${hive.groupid}
hive-service-rpc
${hive.version}
${spark.bundle.hive.scope}
${hive.groupid}
hive-jdbc
${hive.version}
${spark.bundle.hive.scope}
javax.servlet
*
javax.servlet.jsp
*
org.eclipse.jetty
*
${hive.groupid}
hive-metastore
${hive.version}
${spark.bundle.hive.scope}
javax.servlet
*
org.datanucleus
datanucleus-core
javax.servlet.jsp
*
guava
com.google.guava
${hive.groupid}
hive-common
${hive.version}
${spark.bundle.hive.scope}
org.eclipse.jetty.orbit
javax.servlet
org.eclipse.jetty
*
org.eclipse.jetty
jetty-server
${jetty.version}
org.eclipse.jetty
jetty-util
${jetty.version}
org.eclipse.jetty
jetty-webapp
${jetty.version}
org.eclipse.jetty
jetty-http
${jetty.version}
hudi/packaging/hudi-utilities-bundle/pom.xml,在345行的位置,修改如下:
org.apache.hudi
hudi-common
${project.version}
org.eclipse.jetty
*
org.apache.hudi
hudi-client-common
${project.version}
org.eclipse.jetty
*
${hive.groupid}
hive-service
${hive.version}
${utilities.bundle.hive.scope}
servlet-api
javax.servlet
guava
com.google.guava
org.eclipse.jetty
*
org.pentaho
*
${hive.groupid}
hive-service-rpc
${hive.version}
${utilities.bundle.hive.scope}
${hive.groupid}
hive-jdbc
${hive.version}
${utilities.bundle.hive.scope}
javax.servlet
*
javax.servlet.jsp
*
org.eclipse.jetty
*
${hive.groupid}
hive-metastore
${hive.version}
${utilities.bundle.hive.scope}
javax.servlet
*
org.datanucleus
datanucleus-core
javax.servlet.jsp
*
guava
com.google.guava
${hive.groupid}
hive-common
${hive.version}
${utilities.bundle.hive.scope}
org.eclipse.jetty.orbit
javax.servlet
org.eclipse.jetty
*
org.eclipse.jetty
jetty-server
${jetty.version}
org.eclipse.jetty
jetty-util
${jetty.version}
org.eclipse.jetty
jetty-webapp
${jetty.version}
org.eclipse.jetty
jetty-http
${jetty.version}
指定版本执行编译命令
mvn clean package -DskipTests -Dspark2.4.0 -Dflink1.14 -Dscala-2.12 -Dhadoop.version=3.0.0 -Pflink-bundle-shade-hive2
报错如下:
无法将类 org.apache.zookeeper.server.ZooKeeperServer中的方法 shutdown应用到给定类型
将hadoop、spark版本指定为cdh版本,重新编译
mvn clean package -DskipTests -Dspark2.4.0-cdh6.3.1 -Dflink1.14 -Dscala-2.12 -Dhadoop.version=3.0.0-cdh6.3.1 -Pflink-bundle-shade-hive2
报错如下:
cdh的包找不到,没有Scala2.12的包
更改Scala版本为2.11,重新编译
mvn clean package -DskipTests -Dspark2.4.0-cdh6.3.1 -Dflink1.14 -Dscala-2.11 -Dhadoop.version=3.0.0-cdh6.3.1 -Pflink-bundle-shade-hive2
报错如下:
[ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.3.1:compile (scala-compile-first) on project hudi-spark-common_2.11: wrap: org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1) -> [Help 1]
往上查日志,发现error信息
注释掉org.apache.hudi.DataSourceReadOptions的部分代码
注释掉org.apache.hudi.HoodieBaseRelation的部分代码
重新编译
mvn clean package -DskipTests -Dspark2.4.0-cdh6.3.1 -Dflink1.14 -Dscala-2.11 -Dhadoop.version=3.0.0-cdh6.3.1 -Pflink-bundle-shade-hive2
报错如下:
error: polymorphic expression cannot be instantiated to expected type
......
required: Seq[org.apache.spark.sql.execution.datasources.PartitionedFile]
修改org.apache.spark.sql.adapter.Spark2Adapter的部分源码
重新编译
mvn clean package -DskipTests -Dspark2.4.0-cdh6.3.1 -Dflink1.14 -Dscala-2.11 -Dhadoop.version=3.0.0-cdh6.3.1 -Pflink-bundle-shade-hive2
报错如下:
JSONException未处理
修改org.apache.hudi.utilities.sources.helpers.S3EventsMetaSelector的部分源码,增加try catch
重新编译
mvn clean package -DskipTests -Dspark2.4.0-cdh6.3.1 -Dflink1.14 -Dscala-2.11 -Dhadoop.version=3.0.0-cdh6.3.1 -Pflink-bundle-shade-hive2
报错如下:
同样是JSONException未处理
修改部分源码,增加try catch
重新编译
mvn clean package -DskipTests -Dspark2.4.0-cdh6.3.1 -Dflink1.14 -Dscala-2.11 -Dhadoop.version=3.0.0-cdh6.3.1 -Pflink-bundle-shade-hive2
编译成功
参考:
Hudi集成CDH – 时光如水
0871-6.3.2-如何基于CDH6环境编译Hudi-0.9.0并使用 - 腾讯云开发者社区-腾讯云
整合Apache Hudi+Mysql+FlinkCDC2.1+CDH6.3.0_江南独孤客的技术博客_51CTO博客