当前位置: 首页 > news >正文

Hudi安装部署

编译环境准备

1.安装maven

(1)上传maven包到/opt/software目录,解压更名

先安装unzip(如果系统未预装,以 CentOS 为例)

sudo yum install unzip -y

解压到/opt/module/目录:

unzip apache-maven-3.6.1.zip -d /opt/module/
mv apache-maven-3.6.1 maven-3.6.1

添加环境变量

vim /etc/profile.d/my_env.sh
#maven环境变量
export MAVEN_HOME=/opt/module/maven-3.6.1
export PATH=$MAVEN_HOME/bin:$PATH
source /etc/profile

验证安装

如果没权限的执行

chmod +x /opt/module/maven-3.6.1/bin/mvn
mvn -v

(2)修改为阿里镜像

修改setting.xml 指定为阿里仓库地址

在conf目录下

vim settings.xml

2、编译Hudi

(1)上传Hudi包

上传并解压

tar -zxvf hudi-0.12.0.src.tgz -C /opt/module/

(2)Hudi下修改pom文件

vim pom.xml

(3)修改源码兼容hadoop3

hudi默认依赖hadoop2,需要修改

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

添加一个参数,null,避免版本不兼容报错

(4)解决spark模块依赖冲突

修改了Hive版本为3.1.2,其携带的jetty是0.9.3,hudi本身用的0.9.4,存在依赖冲突。

否则在使用spark向hudi表插入数据时,会报错

vim /opt/module/hudi-0.12.0/packaging/hudi-spark-bundle/pom.xml

在382行的位置,添加如下(红色部分):

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

(5)修改hudi-utilities-bundle的pom文件

排除低版本jetty,添加hudi指定版本的jetty

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

在405行的位置,修改如下(红色部分):

否则在使用DeltaStreamer工具向hudi表插入数据时,也会报Jetty的错误。

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

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

(6)执行编译命令

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

(7)编译成功

编译成功后,进入hudi-cli说明成功:

hudi-cli/hudi-cli.sh

(8)运行测试

在opt目录下创建 hudi-jars目录

mkdir hudi-jars

将这俩jar包上传至目录下

启动时显式指定 client 模式启动 spark-shell 时,通过参数强制指定 client 模式:

(1)启动
spark-shell --deploy-mode client
  • 未指定 master:默认使用 Spark 的默认 master(通常是 local[*],即使用本地所有可用 CPU 核心)。
  • 未加载额外 Jar 包:仅使用 Spark 自身的默认依赖,无法直接操作 Hudi 表(会报类找不到错误)。
  • 未指定序列化器:使用 Spark 默认的序列化器(JavaSerializer,性能不如 Kryo)。
  • 仅指定部署模式:明确使用客户端模式,但其他配置均为默认值。
  • 用途:适合简单的 Spark 语法测试、不需要额外依赖的场景.
(2)用这个
spark-shell \
--master local[2] \
--deploy-mode client \
--jars /opt/hudi-jars/hudi-spark3.1-bundle_2.12-0.12.0.jar,/opt/hudi-jars/hudi-utilities-bundle_2.12-0.12.0.jar \
--conf "spark.serializer=org.apache.spark.serializer.KryoSerializer"
  • 指定了运行模式--master local[2] 强制 Spark 在本地模式运行,使用 2 个 CPU 核心。
  • 指定了依赖 Jar 包--jars 加载了 Hudi 相关的两个 Jar 包,用于支持 Hudi 数据湖操作(如读写 Hudi 表)。
  • 指定了序列化器--conf 配置了 Kryo 序列化器(Spark 优化性能的常用序列化方式)。
  • 部署模式:同样显式指定了 --deploy-mode client(客户端模式)。
  • 用途:适合需要使用 Hudi 功能、本地调试、并优化序列化性能的场景。

  • --deploy-mode client:Driver 在本地终端运行,适合交互式场景(如 spark-shell),支持本地模式。
  • --deploy-mode cluster:Driver 在集群节点运行,适合生产环境的非交互式任务,不支持本地模式。

启动spark-shell命令以后,编写scala语言代码,保存数据至Hudi表及Hudi表加载数据

ip/主机名+4040

查看jar包已经上传,成功。

http://www.dtcms.com/a/561942.html

相关文章:

  • 宠物之家网站开发九江网站建设优化公司
  • 网站的360快照怎么做锦州网站seo
  • 【Android】结合View的事件分发机制解决滑动冲突
  • python 异步编程 -- 理解asyncio里的Future 对象
  • zoho crmvue做网站对seo
  • Java---System 类
  • 31.使用等待队列实现阻塞访问
  • Tyme 技术赋能:节气与季节的高效求解实战攻略
  • 【C++】2025CSP-J第二轮真题及解析
  • 网站建设教程流程更改wordpress主题语言
  • 朝阳区网站建设蒙特网设计公司
  • 济南网站优化厂家做同城服务网站比较成功的网站
  • 老鼠目标检测数据集(3000张)
  • 想做个网站怎么做长沙五百强企业名单
  • 九江建网站报价wordpress wiki 整合
  • 中英文版网站建设小广告制作
  • 05-深度学习的原理:探讨深度学习的工作原理和数学基础
  • 【深度学习新浪潮】AI缺陷检测:从技术原理到工业落地实践
  • lol英雄介绍网站模板网络广告推广员
  • 接单网站设计 只做设计图报价cpa推广联盟平台
  • kotlin学习 基础知识一览
  • 开通建立企业网站谷歌浏览器下载安卓版
  • 基于 venv 快速搭建 Python 环境
  • C 文件操作全解速览
  • MCP指南
  • 基于双向时序卷积网络(BiTCN)与支持向量机(SVM)混合模型的时间序列预测代码Matlab源码
  • 怎样免费做一个网站免费推广app是什么意思
  • 构建现代Web应用:使用React框架打造单页面应用
  • 仿站是什么企业vi设计欣赏
  • 招聘 负责网站开发购买了域名怎么使用