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

news2024/12/28 3:04:34

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 前我的集群版本如下:

组件版本号
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

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

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

8. 启动测试
cd $HUDI_HOME

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

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

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

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

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

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

相关文章

JSP ssh驾校管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh驾校管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式 开发。开发环境为TOMCAT7.0,Mye…

6秒钟读懂网络攻击和防御的有关产品理论

文章目录一 常见网络攻击1.病毒攻击2.DDos网络攻击3.木马攻击WebsSheLL4.渗透攻击数据拖取5.APP漏洞6.营销撸羊毛7&#xff0c;DDoS攻击挑战二&#xff0c;大禹基本功能1.基础防护2.BGP高防包3.BGP高仿IP4.棋牌盾三&#xff0c;大禹技术原理1.高仿IP牵引攻击流量&#xff0c;保…

Java安全--CC3

CC3和CC1和CC6的执行命令方式不一样。CC3使用的是动态类加载。我们把恶意代码写在加载类的静态构造方法中。需要注意的是&#xff1a; 当初始化的时候就会执行静态构造方法&#xff0c;defineClass的时候是不会执行静态构造代码块的&#xff0c;我们在找利用点的时候需要有new…

1658 页的《Java 面试突击核心讲》在牛客网火了,完整版 PDF 开放下载!

前言 我们都知道&#xff0c;在程序员的职业生涯中&#xff0c;有多个发展方向&#xff0c;不过就数据表明&#xff0c;近年来选择架构师方向的开发人员也越来越多。 对于架构师的发展前途&#xff0c;我相信是已经没有争议的&#xff0c;但这个“概念”对于很多开发人员来说…

[ vulhub漏洞复现篇 ] solr XML外部实体注入(CVE-2017-12629-xxe)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

网站权重怎么批量查?怎么批量查询网站的360权重

批量查询网站360权重的操作&#xff1a; 第一步、打开SEO综合查询工具 第二步、添加需要查询的网站域名&#xff08;有多少放多少&#xff0c;一行一个域名&#xff09; 第三步、勾选360权重PC权重和360移动权重 第四步、点击开始查询 第五步、等待查询结果出来 如果需要导出查…

vue 前端实现随机背景色

目录前言&#xff1a;步骤&#xff1a;功能效果展示&#xff1a;代码&#xff1a;总结&#xff1a;前言&#xff1a; 要求是页面对应的几个模块每次打开都要显示多个不同的随机颜色&#xff0c;点击刷新则显示的颜色改变。我就封装成了一个函数&#xff0c;有不足的地方&#…

【小甲鱼C语言】课后笔记第一章第二节——变量

目录 1、变量的命名规则 2、关键字 3、基本数据类型 4、声明变量的语法 5、课后习题&#xff08;编程题&#xff09; 1、变量的命名规则 C语言变量名只能是英文字母&#xff08;A-Z&#xff0c;a-z&#xff09;和数字&#xff08;0-9&#xff09;或者下划线&#xff08;_&…

【云原生进阶之容器】第一章Docker核心技术1.1节——Docker综述

1 Docker简述 1.1 什么是Docker Docker是一个开源的软件项目,让用户程序部署在一个相对隔离的环境运行,借此在Linux操作系统上提供一层额外的抽象,以及操作系统层虚拟化的自动管理机制。需要额外指出的是,Docker并不等于容器(containers),Docker只是容器的一种,其他的种…

使用vite插件编写tsx文件

一般情况下&#xff0c;我们在template标签里去写静态页面模板。现在可以扩展另一种书写风格 tsx&#xff0c;类似react的jsx语法。vue2 的时候就已经支持jsx写法&#xff0c;只不过不是很友好&#xff0c;随着vue3对typescript的支持度增高&#xff0c;tsx写法越来越被接受。 …

基本素质提升(一)----日常/命令积累

目录 一、引言 二、日常积累 三、命令积累 一、引言 这个主题主要带大家学习一下日常开发所使用的命令及相关知识&#xff0c;会持续更新 二、日常积累 1、kill 给某个进程发送信号 kill -STOP pid(进程号)&#xff0c;可以发送任何信号给进程&#xff1b;kill -STOP %…

【云计算与大数据技术】云计算概论介绍

一、什么是云计算 云计算&#xff08;cloud computing&#xff09;是基于互联网的相关服务的增加、使用和交付模式&#xff0c;通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。云是网络、互联网的一种比喻说法&#xff0c;过去往往用来用云表示电信网&#xff0c;后…

基于51单片机电动自行车车速报警系统proteus仿真原理图程序

功能&#xff1a; 0.本项目采用STC89C52作为单片机系统的控制MCU 1.LCD1602液晶分三种显示模式 a)显示实时速度和本次里程 b)显示当前时间 c)显示报警速度和总里程 2.超过报警速度将声光报警 3.功能按键介绍 a显示状态下: 上’键——电机速度1 下’键——电机速度-1 设置’键—…

Java基于JSP+mysql的学科竞赛管理系统

随着我学科竞赛是对课堂上所学的理论知识的实践运用&#xff0c;是考察大学生学科基本理论知识和解决实际问题能力的比赛&#xff0c;是高等学校人才培养质量的标志之一&#xff0c;是培养知识-能力-素质协调发展的创新型、高素质人才重要途径&#xff0c;对高校的学风、就业也…

Go开发中配置一个Logger日志的功能实现

为什么需要Logger 一般在开发项目的时候我们都是需要一个存储日志的文件&#xff0c;因为在部署项目以后&#xff0c;我们只能通过去筛查日志进行检索问题&#xff0c;这时候日志是否可以呈现清晰这个对于我们进行排查工作是十分重要的&#xff0c;所以Logger能否展示出我们最…

Linux基础——git和gdb的使用

前言 我们在平时维护和上传代码时会用到git&#xff0c;但是这个git具体是什么&#xff0c;往往又说不清楚。其实git其实就是一个版本管理工具&#xff0c;有了这个工具就能方便快捷地查询自己上传代码的不同版本&#xff0c;对每一次上传的改动了如指掌。 那gdb又是什么呢&a…

文本生成自回归解码策略总结

当今文本生成的主流方式还是自回归式的语言建模&#xff0c;本篇文章对文本生成常用的几种自回归采样&解码策略进行总结&#xff08;以下统称为采样&#xff09;。 采样方式Argmax Decoding&#xff08;贪婪采样&#xff09;Greedy Search&#xff08;贪心搜索&#xff09;…

Neo4J入门笔记[2]---Neo4J GDS 图数据科学库

Neo4J 提供了GDS的库&#xff0c;里面包括了很多算法。GDS的英语全称是Graph Data Science&#xff08;图数据科学库&#xff09;&#xff0c;其句法流程如下&#xff1a; stream Returns the result of the algorithm as a stream of records. stats Returns a single recor…

【VUE3】保姆级基础讲解(二)计算属性,vue组件,vue-cli脚手架,组件通讯,插槽slot

目录 计算属性computed 侦听器watch 对象监听 组件 注册全局组件 注册局部组件 Vue-CLI脚手架 安装和使用 .browserslistrc main.js jsconfig.json 组件通讯 父组件传递给子组件 props基础 非prop的attribute 子组件传递给父组件 插槽slot 基础使用 具名插槽 …

前端整合ECharts

1、简介 ECharts是百度的一个项目&#xff0c;后来百度把Echart捐给apache&#xff0c;用于图表展示&#xff0c;提供了常规的折线图、柱状图、散点图、饼图、K线图&#xff0c;用于统计的盒形图&#xff0c;用于地理数据可视化的地图、热力图、线图&#xff0c;用于关系数据可…