大数据数据湖技术Hudi0.12.0版本源码编译

news2024/12/28 21:35:30

0 介绍

Apache Hudi(Hadoop Upserts Delete and Incremental)是下一代流数据湖平台。Apache Hudi将核心仓库和数据库功能直接引入数据湖。Hudi提供了表、事务、高效的upserts/delete、高级索引、流摄取服务、数据集群/压缩优化和并发,同时保持数据的开源文件格式。
Apache Hudi不仅非常适合于流工作负载,而且还允许创建高效的增量批处理管道。
Apache Hudi可以轻松地在任何云存储平台上使用。Hudi的高级性能优化,使分析工作负载更快的任何流行的查询引擎,包括Apache Spark、Flink、Presto、Trino、Hive等。

1 环境准备

1.1 安装maven

要求maven版本3.3.1版本及以上
在这里插入图片描述
修改setting.xml,指定为阿里仓库地址

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

1.2 安装JDK

要求jdk8及以上的版本
在这里插入图片描述

1.3 Git

主要用于获取hudi源码

1.4 下载hudi源码

https://github.com/apache/hudi/releases/

2 Hudi源码编译

2.1 修改pom文件

修改hudi-0.12.0/pom.xml文件
1)新增repository加速依赖下载

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

2)修改依赖的组件版本
根据需要适配的组件修改相应的版本号,默认的hadoop版本为2.10.1。hive默认版本为2.3.1,修改为当前自己使用的版本
在这里插入图片描述

2.2 修改代码

Hudi默认依赖的hadoop2,要兼容hadoop3,除了修改版本,还需要修改如下代码:
hudi-0.12.0/hudi-common/src/main/java/org/apache/hudi/common/table/log/block/HoodieParquetDataBlock.java
在这里插入图片描述
否则会因为hadoop2.x和3.x版本兼容问题.

2.3 修改kafka依赖

有几个kafka的依赖需要手动安装,否则编译报错如下:

1)下载jar包
通过网址下载:http://packages.confluent.io/archive/5.3/confluent-5.3.4-2.12.zip
解压后找到以下jar包,上传服务器

common-config-5.3.4.jar
common-utils-5.3.4.jar
kafka-avro-serializer-5.3.4.jar
kafka-schema-registry-client-5.3.4.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

2.4 解决spark模块依赖冲突

修改了Hive版本为3.1.0,其携带的jetty是0.9.3,hudi本身用的0.9.4,存在依赖冲突
1)修改hudi-spark-bundle的pom文件,排除低版本jetty,添加hudi指定版本的jetty:
hudi-0.12.0/packaging/hudi-spark-bundle/pom.xml
在280行的位置,添加内容如下:

<!-- Hive -->
    <dependency>
      <groupId>${hive.groupid}</groupId>
      <artifactId>hive-service</artifactId>
      <version>${hive.version}</version>
      <scope>${spark.bundle.hive.scope}</scope>
      <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>
    </dependency>

    <dependency>
      <groupId>${hive.groupid}</groupId>
      <artifactId>hive-service-rpc</artifactId>
      <version>${hive.version}</version>
      <scope>${spark.bundle.hive.scope}</scope>
    </dependency>

    <dependency>
      <groupId>${hive.groupid}</groupId>
      <artifactId>hive-jdbc</artifactId>
      <version>${hive.version}</version>
      <scope>${spark.bundle.hive.scope}</scope>
      <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>
    </dependency>

    <dependency>
      <groupId>${hive.groupid}</groupId>
      <artifactId>hive-metastore</artifactId>
      <version>${hive.version}</version>
      <scope>${spark.bundle.hive.scope}</scope>
      <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>
    </dependency>

    <dependency>
      <groupId>${hive.groupid}</groupId>
      <artifactId>hive-common</artifactId>
      <version>${hive.version}</version>
      <scope>${spark.bundle.hive.scope}</scope>
      <exclusions>
        <exclusion>
          <groupId>org.eclipse.jetty.orbit</groupId>
          <artifactId>javax.servlet</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.eclipse.jetty</groupId>
          <artifactId>*</artifactId>
        </exclusion>
      </exclusions>
</dependency>

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

hive-service

在这里插入图片描述
hive-jdbc
在这里插入图片描述
hive-metastore
在这里插入图片描述
hive-common
在这里插入图片描述
最后新增
在这里插入图片描述
2)修改hudi-utilities-bundle的pom文件,排除低版本jetty,添加hudi指定版本的jetty:
hudi-0.12.0/packaging/hudi-utilities-bundle/pom.xml

<!-- Hoodie -->
    <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 -->
    <dependency>
      <groupId>${hive.groupid}</groupId>
      <artifactId>hive-service</artifactId>
      <version>${hive.version}</version>
      <scope>${utilities.bundle.hive.scope}</scope>
      <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>
    </dependency>

    <dependency>
      <groupId>${hive.groupid}</groupId>
      <artifactId>hive-service-rpc</artifactId>
      <version>${hive.version}</version>
      <scope>${utilities.bundle.hive.scope}</scope>
    </dependency>

    <dependency>
      <groupId>${hive.groupid}</groupId>
      <artifactId>hive-jdbc</artifactId>
      <version>${hive.version}</version>
      <scope>${utilities.bundle.hive.scope}</scope>
      <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>
    </dependency>

    <dependency>
      <groupId>${hive.groupid}</groupId>
      <artifactId>hive-metastore</artifactId>
      <version>${hive.version}</version>
      <scope>${utilities.bundle.hive.scope}</scope>
      <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>
    </dependency>

    <dependency>
      <groupId>${hive.groupid}</groupId>
      <artifactId>hive-common</artifactId>
      <version>${hive.version}</version>
      <scope>${utilities.bundle.hive.scope}</scope>
      <exclusions>
        <exclusion>
          <groupId>org.eclipse.jetty.orbit</groupId>
          <artifactId>javax.servlet</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.eclipse.jetty</groupId>
          <artifactId>*</artifactId>
        </exclusion>
      </exclusions>
</dependency>

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

hive-service
在这里插入图片描述
hive-jdbc
在这里插入图片描述
hive-metastore
在这里插入图片描述
hive-common
在这里插入图片描述
新增内容
在这里插入图片描述

2.5 执行编译

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

注:这里通过-D参数指定spark/flink组件版本,指定scala版本

在这里插入图片描述

3 验证

编译成功后,进入hudi-cli说明成功
在这里插入图片描述
编译完成后,相关的包在packaging目录的各个模块中:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/562185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WorkPlus AI助理 | 将企业业务场景与ChatGPT结合

近年来&#xff0c;人工智能成为了企业数字化转型的热门话题&#xff0c;作为被训练的语言模型&#xff0c;ChatGPT具备模拟对话、回答问题、写代码、写小说、进行线上内容创作的能力&#xff0c;还能根据聊天的上下文进行互动。作为一款新兴的人工智能应用程序&#xff0c;对于…

jdk14至16——record关键字

record类型是从14开始预览到16成为正式版的&#xff0c;record类型是一种受限制的类&#xff0c;一般用来封装不可变对象&#xff0c;record类型会自动生成一个全部属性的构造方法&#xff0c;以及属性的get方法&#xff0c;但没有set方法&#xff0c;会自动生成hashCode()、eq…

JS中深拷贝浅拷贝的区别

深浅拷贝在MDN官方中的表述是这样的&#xff1a; 对象的深拷贝是指其属性与其拷贝的源对象的属性不共享相同的引用&#xff08;指向相同的底层值&#xff09;的副本。因此&#xff0c;当你更改源或副本时&#xff0c;可以确保不会导致其他对象也发生更改&#xff1b;也就是说&a…

vue下拉框vue字典映射转换失败 字符转数字parseInt :value vue下拉框无法选择 选什么都是最后一个 el-select默认选中 el-select设为只读 input输入框设为只读

现象&#xff1a; 解决后&#xff1a; 关键点&#xff1a; 1、value"0" 与 :value"0" 不同&#xff0c;加冒号:试试 2、:value"parseInt(dict.dictValue)" 字符串转int试试 parseInt() 写死下拉框 <el-form-item label"类型" pro…

COBOL 程序结构

COBOL 程序结构 COBOL程序结构由部&#xff08;division&#xff09;组成&#xff0c;如下图所示&#xff1a; 这些部简介如下&#xff1a; **Sections&#xff08;节&#xff09;**是程序逻辑的逻辑细分。节是段落的集合。**Paragraphs&#xff08;段&#xff09;**是一个节…

路面积水监测-路面积水监测系统

在城市化进程不断加快的背景下&#xff0c;城市道路面临着日益严重的积水问题。持续的降雨和不良的排水系统导致路面积水&#xff0c;给交通运输和城市生活带来了诸多不便和安全隐患。路面积水监测系统旨在易涝点布设内涝积水监测仪&#xff0c;实时了解路面积水情况&#xff0…

矿井水除氟,污水除氟的工艺分析

高矿化度的废水是指含有高浓度溶解性矿物质的废水&#xff0c;通常指的是含有高浓度钠、钙、镁、铁、铝、钾等离子的废水。这些离子通常来自于废水所处的环境、工业或生产过程中使用的原材料和化学品。高矿化度的废水通常具有高盐度、高电导率、高硬度等特征&#xff0c;对环境…

【Nginx】缓存集成

文章目录 缓存的概念Nginx的web缓存服务Nginx缓存设置的相关指令Nginx缓存设置案例Nginx缓存的清除方式一:删除对应的缓存目录方式二:使用第三方扩展模块 Nginx设置资源不缓存 缓存的概念 缓存就是数据交换的缓冲区(称作:Cache),当用户要获取数据的时候&#xff0c;会先从缓存…

DOUBLETROUBLE 1

文章目录 DOUBLETROUBLE: 1实战演练一、前期准备1、相关信息 二、信息收集1、nmap探测目标靶机端口2、扫描目标网址目录3、访问网站&#xff0c;发现secret下有个图片4、将图片下载5、查看图片所含内容6、破解密码并查看7、登陆邮箱8、创建反弹shell9、上传反弹shell10、监听11…

【云计算架构】通过新的优化视角查看云架构

仅仅让云部署工作不再是目标。关注构建和部署最佳解决方案的新指标和方法。 随着云计算架构的成熟&#xff0c;我们定义成功的方式也应该成熟。在2021&#xff0c;我指出&#xff0c;优化云计算更多的是二进制过程&#xff0c;而不是模拟过程。 我当时所说的仍然是正确的&#…

【医学图像】图像分割系列.1

医学图像分割是一个比较有应用意义的方向&#xff0c;本文简单介绍三篇关于医学图像分割的论文&#xff1a; UNeXt&#xff08;MICCAI2022&#xff09;&#xff0c;PHTrans&#xff08;MICCAI2022&#xff09;&#xff0c;DA-Net&#xff08;MICCAI2022&#xff09;。 目录 …

目标追踪---deepsort原理讲解

目录 一、多目标追踪的主要步骤 二、sort流程 三、Deepsort算法流程 一、多目标追踪的主要步骤 获取原始视频帧利用目标检测器对视频帧中的目标进行检测将检测到的目标的框中的特征提取出来&#xff0c;该特征包括表观特征&#xff08;方便特征对比避免ID switch&#xff0…

SQL语句练习附带答案

首先创建数据库filmclub DROP DATABASE IF EXISTS filmclub;CREATE DATABASE filmclub;USE filmclub;CREATE TABLE category (cid INT PRIMARY KEY AUTO_INCREMENT,cname VARCHAR(20) )CHARSETutf8; CREATE TABLE film (fid INT PRIMARY KEY AUTO_INCREMENT,fname VARCHAR(20)…

ChatGPT和 dalle2 配合生成故事绘本

和 dalle2 配合生成故事绘本 在之前章节中&#xff0c;我们已经尝试过让 ChatGPT 来生成一些故事情节&#xff0c;不管是影视剧还是小说还是游戏都可以。这时候&#xff0c;自然而然的可以联想到&#xff1a;那我们可不可以一步到位&#xff0c;把 ChatGPT 编出来的故事情节&a…

为什么MySQL数据库单表建议最大2KW数据?

文章目录 为什么MySQL数据库单表建议最大2KW数据&#xff1f;一、 Innodb 存储引擎1、数据存储2、数据页的结构 二、 B tree 结构三、 B 树存放数据的行数 为什么MySQL数据库单表建议最大2KW数据&#xff1f; 我们经常会听到一种说法&#xff0c;在MySQL中&#xff0c;数据库单…

Spring Security 中的 CSRF 攻击是什么?如何防止它?

Spring Security 中的 CSRF 攻击是什么&#xff1f;如何防止它&#xff1f; 什么是 CSRF 攻击&#xff1f; CSRF&#xff08;Cross-Site Request Forgery&#xff09;攻击是一种常见的网络安全威胁&#xff0c;也称为“跨站请求伪造”攻击。攻击者可以通过某些手段&#xff0…

SpringBoot整合RabbitMQ及其原理分析

上一篇&#xff1a;RabbitMQ基础知识 1、相关依赖 这里无需指定版本号&#xff0c;让其跟着SpringBoot版本走。本示例使用SpringBoot版本号为2.7.10。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-…

SaaS系统平台,如何兼顾客户的个性化需求?

在当今数字化的商业环境中&#xff0c;SaaS系统已经成为企业运营的重要组成部分之一。 SaaS系统平台的好处是显而易见的&#xff0c;可以将业务流程数字化&#xff0c;从而帮助企业提高效率并节省成本。 但是&#xff0c;由于每个企业的业务都不尽相同&#xff0c;所以在选择Sa…

GuLi商城-前端基础ES6

ES6 ES6全称ECMAScript6.0是JavaScript语言的下一代标准。 ECMAScript是浏览器脚本语言的规范&#xff0c;而我们熟悉的各种js语言&#xff0c;如JavaScript则是规范的具体实 现。 新建一个ES6文件夹&#xff0c;shift!按着不动&#xff0c;回车&#xff0c;可以快速生成模…

图神经网络:(处理点云)PPFNet的实现

文章说明&#xff1a; 1)参考资料&#xff1a;PYG官方文档。超链。 2)博主水平不高&#xff0c;如有错误还望批评指正。 3)我在百度网盘上传了这篇文章的jupyter notebook和有关文献。超链。提取码8848。 文章目录 前言文献阅读代码实操历史遗留问题 前言 本篇文章接上一篇文章…