• Hudi第一章:编译安装


    系列文章目录

    Hudi第一章:编译安装



    前言

    Apache Hudi(发音为“连帽衫”)是下一代流数据湖平台。 Apache Hudi 将核心仓库和数据库功能直接引入数据湖。Hudi 提供表、事务、高效的更新插入/删除、高级索引、流式摄取服务、数据聚类/压缩优化、 和并发性,同时将数据保留为开源文件格式。

    Apache Hudi 不仅非常适合流式处理工作负载,而且还允许您创建高效的增量批处理管道。 阅读文档以获取更多用例说明,并查看谁在使用 Hudi,以了解一些 包括Uber、亚马逊、字节跳动、Robinhood等在内的世界上最大的数据湖正在与Hudi一起改造他们的生产数据湖。

    Apache Hudi可以在任何云存储平台上轻松使用。 Hudi 的高级性能优化,使分析工作负载更快 流行的查询引擎包括Apache Spark,Flink,Presto,Trino,Hive等。

    这时官方对Hudi的定义,机翻的看看就写了。


    一、环境准备

    一切资料可在尚硅谷拼台下载

    1.JDK

    Hudi官方要求最低是jdk8,安装方法可以去看hadoop专栏。
    jdk安装

    2.Maven

    尚硅谷的教程建议是3.6.1,但我不知道为什么会失败,后来换成了3.8.8编译成功。
    Maven-3.8.8

    1.上传并解压。

    tar -xvf apache-maven-3.8.8-bin.tar.gz -C /opt/module/
    mv /opt/module/apache-maven-3.8.8/ /opt/module/maven-3.8.8/
    
    • 1
    • 2

    2.修改源

    vim /opt/module/maven-3.8.8/conf/settings.xml
    
    • 1

    将一下内容添加

    <!-- 添加阿里云镜像-->
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云公共仓库</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    放入mirrors标签中。
    在这里插入图片描述

    3.添加环境变量

    sudo vim /etc/profile.d/my_env.sh
    在后边追加Maven的环境变量

    #MAVEN_HOME
    export MAVEN_HOME=/opt/module/maven-3.8.8
    export PATH=$PATH:$MAVEN_HOME/bin
    
    • 1
    • 2
    • 3

    测试一下

    source /etc/profile.d/my_env.sh
    mvn -v
    
    • 1
    • 2

    在这里插入图片描述

    二、hudi编译

    1.上传解压

    tar -xvf /opt/software/hudi-0.12.0.src.tgz -C /opt/software
    
    • 1

    在这里插入图片描述

    2.修改pom

    1.添加仓库

    一定要放在repositorys标签中的最前面

    <repository>
      <id>central</id>
      <url>https://maven.aliyun.com/repository/central</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    2.修改依赖的组件版本

    3.1.3
    3.1.2
    在这里插入图片描述

    2.修改源码兼容hadoop3

    vim /opt/software/hudi-0.12.0/hudi-common/src/main/java/org/apache/hudi/common/table/log/block/HoodieParquetDataBlock.java
    
    • 1

    在这里插入图片描述

    3.手动安装Kafka依赖

    1.上传jar包

    在这里插入图片描述

    2.install到maven本地仓库

    mvn install:install-file -DgroupId=io.confluent -DartifactId=common-config -Dversion=5.3.4 -Dpackaging=jar -Dfile=./common-config-5.3.4.jar
    mvn install:install-file -DgroupId=io.confluent -DartifactId=common-utils -Dversion=5.3.4 -Dpackaging=jar -Dfile=./common-utils-5.3.4.jar
    mvn install:install-file -DgroupId=io.confluent -DartifactId=kafka-avro-serializer -Dversion=5.3.4 -Dpackaging=jar -Dfile=./kafka-avro-serializer-5.3.4.jar
    mvn install:install-file -DgroupId=io.confluent -DartifactId=kafka-schema-registry-client -Dversion=5.3.4 -Dpackaging=jar -Dfile=./kafka-schema-registry-client-5.3.4.jar
    
    • 1
    • 2
    • 3
    • 4

    4.解决spark模块依赖冲突

    1.修改hudi-spark-bundle的pom文件

    vim /opt/software/hudi-0.12.0/packaging/hudi-spark-bundle/pom.xml
    以箭头为表示,修改对应的pom

          <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

          <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
          <exclusions>
            <exclusion>
              <groupId>org.eclipse.jetty.orbit</groupId>
              <artifactId>javax.servlet</artifactId>
            </exclusion>
            <exclusion>
              <groupId>org.eclipse.jetty</groupId>
              <artifactId>*</artifactId>
            </exclusion>
          </exclusions>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    整个添加

        <!-- 增加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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述

    2.修改hudi-utilities-bundle的pom文件

    vim /opt/software/hudi-0.12.0/packaging/hudi-utilities-bundle/pom.xml

          <exclusions>
            <exclusion>
              <groupId>org.eclipse.jetty</groupId>
              <artifactId>*</artifactId>
            </exclusion>
          </exclusions>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

          <exclusions>
            <exclusion>
              <groupId>org.eclipse.jetty</groupId>
              <artifactId>*</artifactId>
            </exclusion>
          </exclusions>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

          <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

          <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

          <exclusions>
            <exclusion>
              <groupId>org.eclipse.jetty.orbit</groupId>
              <artifactId>javax.servlet</artifactId>
            </exclusion>
            <exclusion>
              <groupId>org.eclipse.jetty</groupId>
              <artifactId>*</artifactId>
            </exclusion>
          </exclusions>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    整个添加。

        <!-- 增加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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    5.编译hudi

    在根目录进行编译
    在这里插入图片描述

    mvn clean package -DskipTests -Dspark3.2 -Dflink1.13 -Dscala-2.12 -Dhadoop.version=3.1.3 -Pflink-bundle-shade-hive3
    
    • 1

    编译速度取决于网络和计算机性能,反正时间挺长的。
    可以稍微将内存调大一点避免内存不足。

    在这里插入图片描述

    6.hudi测试

    在这里插入图片描述

    hudi-cli/hudi-cli.sh 
    
    • 1

    在这里插入图片描述


    总结

    至此hudi的编译安装完成,可以再虚拟机打一张快照。

  • 相关阅读:
    文章投稿经历
    MyBatisPlus-乐观锁概念及实现步骤
    Disruptor(一)Sequence
    C++模板编程(24)---模板自变量推导Template Argument Deduction
    交换机基本配置(switch)--华为-思科
    附下载|《2022年中国中小微企业数字化转型路径研究报告》上新啦~
    vscode 插件配置推荐
    vue中双向数据绑定v-model的理解
    经典算法之堆排序及优先队列
    Vue eventBus 事件总线封装下再用才香
  • 原文地址:https://blog.csdn.net/weixin_50835854/article/details/133215824