集群其它生态安装与配置:
Hadoop 完全分布式搭建(超详细)
Hive 搭建(将 MySQL 作为元数据库)
Spark 集群搭建(多种方式)
Sqoop 安装配置(超详细)
环境准备
安装 Hudi 前我的集群版本如下:
组件 | 版本号 |
---|---|
Hadoop | 3.1.3 |
Spark | 3.2.2 |
Hive | 3.1.2 |
JDK | 1.8 |
MySQL | 5.7 |
注意,开始安装 Hudi 前请先检索你的集群,选择合适的 Hudi 版本。
一、安装 Maven
我这里使用的 Maven 版本为 3.6.1
。
1.解压
解压到你的指定路径中。
tar -zxvf apache-maven-3.6.1-bin.tar.gz -C /opt/module/
# 改个名称
mv apache-maven-3.6.1/ maven-3.6.1/
2.配置环境变量
vi /etc/profile
#MAVEN_HOME
MAVEN_HOME=/opt/module/maven-3.6.1
PATH=$PATH:$MAVEN_HOME/bin
保存退出后注意使环境变量生效,souce /ect/profile
。
输入 mvn -v
检查是否安装成功。
3.修改 Maven 下载源
vi $MAVEN_HOME/conf/settings.xml
找到镜像属性配置的那里,添加镜像,我这里选用的阿里云镜像。
nexus-aliyun
central
Nexus aliyun
http://maven.aliyun.com/nexus/content/groups/public
二、安装 Hudi
1.解压
tar -zxvf hudi-0.12.0.src.tgz -C /opt/module/
2.配置环境变量
vi /etc/profile
#HUDI_HOME
HUDI_HOME=/opt/module/hudi-0.12.0
保存退出后注意使环境变量生效,souce /ect/profile
。
3.修改 Hudi 下载源与对应版本号
vi $HUDI_HOME/pom.xml
找到镜像依赖配置,添加新的下载依赖,我这里选用的阿里云依赖,必须放在第一个,否则不会起作用。
nexus-aliyun
nexus-aliyun
http://maven.aliyun.com/nexus/content/groups/public/
true
false
继续编辑 pom.xml
文件,修改组件的对应版本号。
4.修改源码以兼容 Hadoop3.x
Hudi 默认依赖的 Hadoop 为 Hadoop2.x,要兼容 Hadoop3.x,则需要修改 Hudi 源码。
vim $HUDI_HOME/hudi-common/src/main/java/org/apache/hudi/common/table/log/block/HoodieParquetDataBlock.java
在 HoodieParquetDataBlock.java
文件中的大约第 110 行中的参数中添加一个 null
值。
5. 解决 Spark 依赖冲突
我使用的 Hive 版本为 3.1.2
,其携带的 jetty 版本是 0.9.3
,而 Hudi 本身用的 jetty 版本是 0.9.4
,存在依赖冲突,会造成编译错误。
vim $HUDI_HOME/packaging/hudi-spark-bundle/pom.xml
解决 hive-service 依赖冲突:
在大约第 382 行。
guava
com.google.guava
org.eclipse.jetty
*
org.pentaho
*
解决 hive-jdbc 依赖冲突:
在大约第 413 行。
javax.servlet
*
javax.servlet.jsp
*
org.eclipse.jetty
*
解决 hive-metastore 依赖冲突:
在大约第 420 行。
javax.servlet
*
org.datanucleus
datanucleus-core
javax.servlet.jsp
*
guava
com.google.guava
解决 hive-common 依赖冲突:
在大约第 427 行。
org.eclipse.jetty.orbit
javax.servlet
org.eclipse.jetty
*
增加 Hudi 配置版本的 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}
6. 解决 Spark 向 Hudi 插入报错
vim $HUDI_HOME/packaging/hudi-utilities-bundle/pom.xml
解决 Hudi 冲突:
大约在第 345 行
org.apache.hudi
hudi-common
${project.version}
org.eclipse.jetty
*
org.apache.hudi
hudi-client-common
${project.version}
org.eclipse.jetty
*
解决 hive-service 冲突:
大约在第 417 行
servlet-api
javax.servlet
guava
com.google.guava
org.eclipse.jetty
*
org.pentaho
*
解决 hive-jdbc 冲突:
大约在第 450 行
javax.servlet
*
javax.servlet.jsp
*
org.eclipse.jetty
*
解决 hive-metastore 冲突:
大约在第 471 行
javax.servlet
*
org.datanucleus
datanucleus-core
javax.servlet.jsp
*
guava
com.google.guava
解决 hive-common 冲突:
大约在第 496 行
org.eclipse.jetty.orbit
javax.servlet
org.eclipse.jetty
*
增加 Hudi 配置版本的 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}
7. 编译 Hudi
mvn clean package -DskipTests -Dspark3.2 -Dscala-2.12 -Dhadoop.version=3.1.3 -Pflink-bundle-shade-hive3
需要 10 分钟左右,等待依赖下载完成。
8. 启动测试
cd $HUDI_HOME
# 启动 hudi-cli
hudi-cli/hudi-cli.sh
出现如下界面,表示 Hudi 编译成功。
编译完成后,相关的包都在 $HUDI_HOME/packaging
目录下:
到此为止,Hudi 0.12.0 安装完成。