Hudi 搭建  

  • 环境准备
  • 一、安装 Maven
  • 1.解压
  • 2.配置环境变量
  • 3.修改 Maven 下载源
  • 二、安装 Hudi
  • 1.解压
  • 2.配置环境变量
  • 3.修改 Hudi 下载源与对应版本号
  • 4.修改源码以兼容 Hadoop3.x
  • 5. 解决 Spark 依赖冲突
  • 6. 解决 Spark 向 Hudi 插入报错
  • 7. 编译 Hudi
  • 8. 启动测试

集群其它生态安装与配置:

环境准备

安装 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 检查是否安装成功。

zabbix集成hive hive集成hudi_zabbix集成hive

3.修改 Maven 下载源

vi $MAVEN_HOME/conf/settings.xml

找到镜像属性配置的那里,添加镜像,我这里选用的阿里云镜像。

zabbix集成hive hive集成hudi_zabbix集成hive_02

<!-- 添加阿里云镜像-->
<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/
  • 1

2.配置环境变量

vi /etc/profile

#HUDI_HOME
HUDI_HOME=/opt/module/hudi-0.12.0

保存退出后注意使环境变量生效,souce /ect/profile

3.修改 Hudi 下载源与对应版本号

vi $HUDI_HOME/pom.xml
  • 1

找到镜像依赖配置,添加新的下载依赖,我这里选用的阿里云依赖,必须放在第一个,否则不会起作用。

zabbix集成hive hive集成hudi_hudi_03

<!-- 添加阿里云依赖-->
<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 文件,修改组件的对应版本号。

zabbix集成hive hive集成hudi_大数据_04

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
  • 1

在 HoodieParquetDataBlock.java 文件中的大约第 110 行中的参数中添加一个 null 值。

zabbix集成hive hive集成hudi_hudi_05

5. 解决 Spark 依赖冲突

我使用的 Hive 版本为 3.1.2,其携带的 jetty 版本是 0.9.3,而 Hudi 本身用的 jetty 版本是 0.9.4,存在依赖冲突,会造成编译错误。

vim $HUDI_HOME/packaging/hudi-spark-bundle/pom.xml
  • 1

解决 hive-service 依赖冲突:

在大约第 382 行。

zabbix集成hive hive集成hudi_hive_06

<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 行。

zabbix集成hive hive集成hudi_spark_07

<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 行。

zabbix集成hive hive集成hudi_大数据_08

<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 行。

zabbix集成hive hive集成hudi_hive_09

<exclusions>
        <exclusion>
          <groupId>org.eclipse.jetty.orbit</groupId>
          <artifactId>javax.servlet</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.eclipse.jetty</groupId>
          <artifactId>*</artifactId>
        </exclusion>
      </exclusions>
  • 1

增加 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>

zabbix集成hive hive集成hudi_spark_10

6. 解决 Spark 向 Hudi 插入报错

vim $HUDI_HOME/packaging/hudi-utilities-bundle/pom.xml

解决 Hudi 冲突:

大约在第 345 行

zabbix集成hive hive集成hudi_spark_11

<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 行

zabbix集成hive hive集成hudi_hudi_12

<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 行

zabbix集成hive hive集成hudi_hudi_13

<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 行

zabbix集成hive hive集成hudi_spark_14

<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 行

zabbix集成hive hive集成hudi_hive_15

<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
  • 1

需要 10 分钟左右,等待依赖下载完成。

8. 启动测试

cd $HUDI_HOME

# 启动 hudi-cli
hudi-cli/hudi-cli.sh

出现如下界面,表示 Hudi 编译成功。

zabbix集成hive hive集成hudi_zabbix集成hive_16

编译完成后,相关的包都在 $HUDI_HOME/packaging目录下:

zabbix集成hive hive集成hudi_大数据_17

到此为止,Hudi 0.12.0 安装完成。