数据湖 Hudi 0.12.0 编译搭建——集成 Hive3.x 与 Spark3.x

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

环境准备

集群系统:CentOS 7.5

安装 Hudi 前我的集群版本如下:

组件版本号
Hadoop3.1.3
Spark3.2.2
Hive3.1.2
JDK1.8
MySQL5.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 

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

<!-- 添加阿里云镜像-->
<mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
二、安装 Hudi

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

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

<!-- 添加阿里云依赖-->
<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

参数解析:

  • clean:指示 Maven 清除先前构建的任何输出文件(例如生成的类和 JAR 文件)。

  • install:指示 Maven 在本地 Maven 存储库中安装构建的库(Hudi JAR)以供其他项目使用。

  • DskipTests:指示 Maven 在构建期间跳过运行任何测试。这将加快构建速度,但也意味着无法确定Hudi是否按预期工作。

  • 其余选项都是对相关组件版本的指定。

如果出现错误:未知的名称或服务,请修改 DNS 域名。

可以参考这篇博客进行解决:ping报错:未知的名称或服务

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

8. 启动测试
cd $HUDI_HOME

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

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

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

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

Hudi是一个基于Hadoop的开源数据湖技术,可以支持大规模数据的实时流式处理和增量更新。以下是Hudi 0.12.0搭建步骤。 1. 安装HadoopSpark 首先需要安装HadoopSpark,这里不再赘述。 2. 下载HudiHudi官方网站(https://hudi.apache.org/)下载Hudi的二进制文件。 3. 配置HadoopSparkHadoopSpark的配置文件放置在Hudi的conf目录下。 4. 配置HudiHudi的conf目录下创建hudi-site.xml文件,并添加以下内容: ``` <configuration> <property> <name>hoodie.write.concurrency.mode</name> <value>optimistic_concurrency_control</value> <description> Concurrency control mode to use for writes. Supported modes are: optimistic_concurrency_control, pessimistic_concurrency_control </description> </property> <property> <name>hoodie.datasource.write.recordkey.field</name> <value>id</value> <description> The field in the record that uniquely identifies a record. If not set, the record will be assigned a random UUID as the key. </description> </property> <property> <name>hoodie.datasource.write.partitionpath.field</name> <value>date</value> <description> The field in the record that is used to determine the partition path. If not set, the partition path will be the default partition path. </description> </property> </configuration> ``` 5. 启动Hudi 使用以下命令启动Hudi: ``` ./bin/hudi-quickstart.sh ``` 6. 测试Hudi 使用以下命令运行Hudi测试: ``` ./bin/run-hoodie-quickstart.sh ``` 如果一切正常,将会在终端中输出相关信息。 以上是Hudi 0.12.0搭建步骤,希望对您有所帮助。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月亮给我抄代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值