Hudi 搭建
集群其它生态安装与配置:
- Hadoop 完全分布式搭建(超详细)
- Hive 搭建(将 MySQL 作为元数据库)
- Spark 集群搭建(多种方式)
- Sqoop 安装配置(超详细)
环境准备
安装 Hudi 前我的集群版本如下:
组件版本号Hadoop3.1.3Spark3.2.2Hive3.1.2JDK1.8MySQL5.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_HOMEMAVEN_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
找到镜像属性配置的那里,添加镜像,我这里选用的阿里云镜像。
<!-- 添加阿里云镜像--><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>
二、安装 Hudi
1.解压
tar-zxvf hudi-0.12.0.src.tgz -C /opt/module/
2.配置环境变量
vi /etc/profile
#HUDI_HOMEHUDI_HOME=/opt/module/hudi-0.12.0
保存退出后注意使环境变量生效,
souce /ect/profile
。
3.修改 Hudi 下载源与对应版本号
vi$HUDI_HOME/pom.xml
找到镜像依赖配置,添加新的下载依赖,我这里选用的阿里云依赖,必须放在第一个,否则不会起作用。
<!-- 添加阿里云依赖--><repository><id>nexus-aliyun</id><name>nexus-aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></repository>
继续编辑
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 行。
<exclusions><exclusion><artifactId>guava</artifactId><groupId>com.google.guava</groupId></exclusion><exclusion><groupId>org.eclipse.jetty</groupId><artifactId>*</artifactId></exclusion><exclusion><groupId>org.pentaho</groupId><artifactId>*</artifactId></exclusion></exclusions>
解决 hive-jdbc 依赖冲突:
在大约第 413 行。
<exclusions><exclusion><groupId>javax.servlet</groupId><artifactId>*</artifactId></exclusion><exclusion><groupId>javax.servlet.jsp</groupId><artifactId>*</artifactId></exclusion><exclusion><groupId>org.eclipse.jetty</groupId><artifactId>*</artifactId></exclusion></exclusions>
解决 hive-metastore 依赖冲突:
在大约第 420 行。
<exclusions><exclusion><groupId>javax.servlet</groupId><artifactId>*</artifactId></exclusion><exclusion><groupId>org.datanucleus</groupId><artifactId>datanucleus-core</artifactId></exclusion><exclusion><groupId>javax.servlet.jsp</groupId><artifactId>*</artifactId></exclusion><exclusion><artifactId>guava</artifactId><groupId>com.google.guava</groupId></exclusion></exclusions>
解决 hive-common 依赖冲突:
在大约第 427 行。
<exclusions><exclusion><groupId>org.eclipse.jetty.orbit</groupId><artifactId>javax.servlet</artifactId></exclusion><exclusion><groupId>org.eclipse.jetty</groupId><artifactId>*</artifactId></exclusion></exclusions>
增加 Hudi 配置版本的 jetty 依赖:
<dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-server</artifactId><version>${jetty.version}</version></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-util</artifactId><version>${jetty.version}</version></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-webapp</artifactId><version>${jetty.version}</version></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-http</artifactId><version>${jetty.version}</version></dependency>
6. 解决 Spark 向 Hudi 插入报错
vim$HUDI_HOME/packaging/hudi-utilities-bundle/pom.xml
解决 Hudi 冲突:
大约在第 345 行
<dependency><groupId>org.apache.hudi</groupId><artifactId>hudi-common</artifactId><version>${project.version}</version><exclusions><exclusion><groupId>org.eclipse.jetty</groupId><artifactId>*</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.hudi</groupId><artifactId>hudi-client-common</artifactId><version>${project.version}</version><exclusions><exclusion><groupId>org.eclipse.jetty</groupId><artifactId>*</artifactId></exclusion></exclusions></dependency>
解决 hive-service 冲突:
大约在第 417 行
<exclusions><exclusion><artifactId>servlet-api</artifactId><groupId>javax.servlet</groupId></exclusion><exclusion><artifactId>guava</artifactId><groupId>com.google.guava</groupId></exclusion><exclusion><groupId>org.eclipse.jetty</groupId><artifactId>*</artifactId></exclusion><exclusion><groupId>org.pentaho</groupId><artifactId>*</artifactId></exclusion></exclusions>
解决 hive-jdbc 冲突:
大约在第 450 行
<exclusions><exclusion><groupId>javax.servlet</groupId><artifactId>*</artifactId></exclusion><exclusion><groupId>javax.servlet.jsp</groupId><artifactId>*</artifactId></exclusion><exclusion><groupId>org.eclipse.jetty</groupId><artifactId>*</artifactId></exclusion></exclusions>
解决 hive-metastore 冲突:
大约在第 471 行
<exclusions><exclusion><groupId>javax.servlet</groupId><artifactId>*</artifactId></exclusion><exclusion><groupId>org.datanucleus</groupId><artifactId>datanucleus-core</artifactId></exclusion><exclusion><groupId>javax.servlet.jsp</groupId><artifactId>*</artifactId></exclusion><exclusion><artifactId>guava</artifactId><groupId>com.google.guava</groupId></exclusion></exclusions>
解决 hive-common 冲突:
大约在第 496 行
<exclusions><exclusion><groupId>org.eclipse.jetty.orbit</groupId><artifactId>javax.servlet</artifactId></exclusion><exclusion><groupId>org.eclipse.jetty</groupId><artifactId>*</artifactId></exclusion></exclusions>
增加 Hudi 配置版本的 jetty 依赖:
<dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-server</artifactId><version>${jetty.version}</version></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-util</artifactId><version>${jetty.version}</version></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-webapp</artifactId><version>${jetty.version}</version></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-http</artifactId><version>${jetty.version}</version></dependency>
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 安装完成。
版权归原作者 月亮给我抄代码 所有, 如有侵权,请联系我们删除。