集群其它生态安装与配置:
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 版本为 3.6.1
。
解压到你的指定路径中。
tar -zxvf apache-maven-3.6.1-bin.tar.gz -C /opt/module/
# 改个名称
mv apache-maven-3.6.1/ maven-3.6.1/
vi /etc/profile
#MAVEN_HOME
MAVEN_HOME=/opt/module/maven-3.6.1
PATH=$PATH:$MAVEN_HOME/bin
保存退出后注意使环境变量生效,souce /ect/profile
。
输入 mvn -v
检查是否安装成功。
vi $MAVEN_HOME/conf/settings.xml
找到镜像属性配置的那里,添加镜像,我这里选用的阿里云镜像。
<mirror>
<id>nexus-aliyunid>
<mirrorOf>centralmirrorOf>
<name>Nexus aliyunname>
<url>http://maven.aliyun.com/nexus/content/groups/publicurl>
mirror>
tar -zxvf hudi-0.12.0.src.tgz -C /opt/module/
vi /etc/profile
#HUDI_HOME
HUDI_HOME=/opt/module/hudi-0.12.0
保存退出后注意使环境变量生效,souce /ect/profile
。
vi $HUDI_HOME/pom.xml
找到镜像依赖配置,添加新的下载依赖,我这里选用的阿里云依赖,必须放在第一个,否则不会起作用。
<repository>
<id>nexus-aliyunid>
<name>nexus-aliyunname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<releases>
<enabled>trueenabled>
releases>
<snapshots>
<enabled>falseenabled>
snapshots>
repository>
继续编辑 pom.xml
文件,修改组件的对应版本号。
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
值。
我使用的 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 行。
<exclusions>
<exclusion>
<artifactId>guavaartifactId>
<groupId>com.google.guavagroupId>
exclusion>
<exclusion>
<groupId>org.eclipse.jettygroupId>
<artifactId>*artifactId>
exclusion>
<exclusion>
<groupId>org.pentahogroupId>
<artifactId>*artifactId>
exclusion>
exclusions>
解决 hive-jdbc 依赖冲突:
在大约第 413 行。
<exclusions>
<exclusion>
<groupId>javax.servletgroupId>
<artifactId>*artifactId>
exclusion>
<exclusion>
<groupId>javax.servlet.jspgroupId>
<artifactId>*artifactId>
exclusion>
<exclusion>
<groupId>org.eclipse.jettygroupId>
<artifactId>*artifactId>
exclusion>
exclusions>
解决 hive-metastore 依赖冲突:
在大约第 420 行。
<exclusions>
<exclusion>
<groupId>javax.servletgroupId>
<artifactId>*artifactId>
exclusion>
<exclusion>
<groupId>org.datanucleusgroupId>
<artifactId>datanucleus-coreartifactId>
exclusion>
<exclusion>
<groupId>javax.servlet.jspgroupId>
<artifactId>*artifactId>
exclusion>
<exclusion>
<artifactId>guavaartifactId>
<groupId>com.google.guavagroupId>
exclusion>
exclusions>
解决 hive-common 依赖冲突:
在大约第 427 行。
<exclusions>
<exclusion>
<groupId>org.eclipse.jetty.orbitgroupId>
<artifactId>javax.servletartifactId>
exclusion>
<exclusion>
<groupId>org.eclipse.jettygroupId>
<artifactId>*artifactId>
exclusion>
exclusions>
增加 Hudi 配置版本的 jetty 依赖:
<dependency>
<groupId>org.eclipse.jettygroupId>
<artifactId>jetty-serverartifactId>
<version>${jetty.version}version>
dependency>
<dependency>
<groupId>org.eclipse.jettygroupId>
<artifactId>jetty-utilartifactId>
<version>${jetty.version}version>
dependency>
<dependency>
<groupId>org.eclipse.jettygroupId>
<artifactId>jetty-webappartifactId>
<version>${jetty.version}version>
dependency>
<dependency>
<groupId>org.eclipse.jettygroupId>
<artifactId>jetty-httpartifactId>
<version>${jetty.version}version>
dependency>
vim $HUDI_HOME/packaging/hudi-utilities-bundle/pom.xml
解决 Hudi 冲突:
大约在第 345 行
<dependency>
<groupId>org.apache.hudigroupId>
<artifactId>hudi-commonartifactId>
<version>${project.version}version>
<exclusions>
<exclusion>
<groupId>org.eclipse.jettygroupId>
<artifactId>*artifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>org.apache.hudigroupId>
<artifactId>hudi-client-commonartifactId>
<version>${project.version}version>
<exclusions>
<exclusion>
<groupId>org.eclipse.jettygroupId>
<artifactId>*artifactId>
exclusion>
exclusions>
dependency>
解决 hive-service 冲突:
大约在第 417 行
<exclusions>
<exclusion>
<artifactId>servlet-apiartifactId>
<groupId>javax.servletgroupId>
exclusion>
<exclusion>
<artifactId>guavaartifactId>
<groupId>com.google.guavagroupId>
exclusion>
<exclusion>
<groupId>org.eclipse.jettygroupId>
<artifactId>*artifactId>
exclusion>
<exclusion>
<groupId>org.pentahogroupId>
<artifactId>*artifactId>
exclusion>
exclusions>
解决 hive-jdbc 冲突:
大约在第 450 行
<exclusions>
<exclusion>
<groupId>javax.servletgroupId>
<artifactId>*artifactId>
exclusion>
<exclusion>
<groupId>javax.servlet.jspgroupId>
<artifactId>*artifactId>
exclusion>
<exclusion>
<groupId>org.eclipse.jettygroupId>
<artifactId>*artifactId>
exclusion>
exclusions>
解决 hive-metastore 冲突:
大约在第 471 行
<exclusions>
<exclusion>
<groupId>javax.servletgroupId>
<artifactId>*artifactId>
exclusion>
<exclusion>
<groupId>org.datanucleusgroupId>
<artifactId>datanucleus-coreartifactId>
exclusion>
<exclusion>
<groupId>javax.servlet.jspgroupId>
<artifactId>*artifactId>
exclusion>
<exclusion>
<artifactId>guavaartifactId>
<groupId>com.google.guavagroupId>
exclusion>
exclusions>
解决 hive-common 冲突:
大约在第 496 行
<exclusions>
<exclusion>
<groupId>org.eclipse.jetty.orbitgroupId>
<artifactId>javax.servletartifactId>
exclusion>
<exclusion>
<groupId>org.eclipse.jettygroupId>
<artifactId>*artifactId>
exclusion>
exclusions>
增加 Hudi 配置版本的 jetty 依赖:
<dependency>
<groupId>org.eclipse.jettygroupId>
<artifactId>jetty-serverartifactId>
<version>${jetty.version}version>
dependency>
<dependency>
<groupId>org.eclipse.jettygroupId>
<artifactId>jetty-utilartifactId>
<version>${jetty.version}version>
dependency>
<dependency>
<groupId>org.eclipse.jettygroupId>
<artifactId>jetty-webappartifactId>
<version>${jetty.version}version>
dependency>
<dependency>
<groupId>org.eclipse.jettygroupId>
<artifactId>jetty-httpartifactId>
<version>${jetty.version}version>
dependency>
mvn clean package -DskipTests -Dspark3.2 -Dscala-2.12 -Dhadoop.version=3.1.3 -Pflink-bundle-shade-hive3
需要 10 分钟左右,等待依赖下载完成。
cd $HUDI_HOME
# 启动 hudi-cli
hudi-cli/hudi-cli.sh
出现如下界面,表示 Hudi 编译成功。
编译完成后,相关的包都在 $HUDI_HOME/packaging
目录下:
到此为止,Hudi 0.12.0 安装完成。