Hudi 0.12.0 搭建——集成 Hive3.1 与 Spark3.2

Hudi 搭建

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

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

  • 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 

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

Hudi 0.12.0 搭建——集成 Hive3.1 与 Spark3.2_第1张图片

<mirror>
        <id>nexus-aliyunid>
        <mirrorOf>centralmirrorOf>
        <name>Nexus aliyunname>
        <url>http://maven.aliyun.com/nexus/content/groups/publicurl>
mirror>

二、安装 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

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

Hudi 0.12.0 搭建——集成 Hive3.1 与 Spark3.2_第2张图片

<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 0.12.0 搭建——集成 Hive3.1 与 Spark3.2_第3张图片
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 值。

Hudi 0.12.0 搭建——集成 Hive3.1 与 Spark3.2_第4张图片
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 行。

Hudi 0.12.0 搭建——集成 Hive3.1 与 Spark3.2_第5张图片
      <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 行。

Hudi 0.12.0 搭建——集成 Hive3.1 与 Spark3.2_第6张图片
      <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 行。

Hudi 0.12.0 搭建——集成 Hive3.1 与 Spark3.2_第7张图片
<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 行。

Hudi 0.12.0 搭建——集成 Hive3.1 与 Spark3.2_第8张图片
   <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>
Hudi 0.12.0 搭建——集成 Hive3.1 与 Spark3.2_第9张图片
6. 解决 Spark 向 Hudi 插入报错
vim $HUDI_HOME/packaging/hudi-utilities-bundle/pom.xml

解决 Hudi 冲突:

大约在第 345 行

Hudi 0.12.0 搭建——集成 Hive3.1 与 Spark3.2_第10张图片
     <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 行

Hudi 0.12.0 搭建——集成 Hive3.1 与 Spark3.2_第11张图片
      <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 行

Hudi 0.12.0 搭建——集成 Hive3.1 与 Spark3.2_第12张图片
  <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 行

Hudi 0.12.0 搭建——集成 Hive3.1 与 Spark3.2_第13张图片
      <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 行

Hudi 0.12.0 搭建——集成 Hive3.1 与 Spark3.2_第14张图片
      <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>
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 0.12.0 搭建——集成 Hive3.1 与 Spark3.2_第15张图片

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

Hudi 0.12.0 搭建——集成 Hive3.1 与 Spark3.2_第16张图片

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

你可能感兴趣的:(Hudi,hive,hadoop,大数据,数据仓库)