Hudi数据湖技术引领大数据新风口(三)解决spark模块依赖冲突

简介: Hudi数据湖技术引领大数据新风口(三)解决spark模块依赖冲突

解决spark模块依赖冲突

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

1)修改hudi-spark-bundle的pom文件,排除低版本jetty,添加hudi指定版本的jetty:

vim /opt/software/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>

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

java.lang.NoSuchMethodError: org.apache.hudi.org.apache.jetty.server.session.SessionHandler.setHttpOnly(Z)V

2)修改hudi-utilities-bundle的pom文件,排除低版本jetty,添加hudi指定版本的jetty:

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

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

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

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

2.2.6 执行编译命令

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

2.2.7 编译成功

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

编译完成后,相关的包在packaging目录的各个模块中:

比如,flink与hudi的包:

下一章 核心概念

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
1月前
|
Cloud Native 数据处理 云计算
探索云原生技术在大数据分析中的应用
随着云计算技术的不断发展,云原生架构作为一种全新的软件开发和部署模式,正逐渐引起企业的广泛关注。本文将探讨云原生技术在大数据分析领域的应用,介绍其优势与挑战,并探讨如何利用云原生技术提升大数据分析的效率和可靠性。
|
15天前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
3天前
|
分布式计算 大数据 数据处理
[AIGC大数据基础] Spark 入门
[AIGC大数据基础] Spark 入门
|
24天前
|
NoSQL 大数据 数据挖掘
现代数据库技术与大数据应用
随着信息时代的到来,数据量呈指数级增长,对数据库技术提出了前所未有的挑战。本文将介绍现代数据库技术在处理大数据应用中的重要性,并探讨了一些流行的数据库解决方案及其在实际应用中的优势。
|
29天前
|
机器学习/深度学习 人工智能 数据可视化
基于Python的数据可视化技术在大数据分析中的应用
传统的大数据分析往往注重数据处理和计算,然而数据可视化作为一种重要的技术手段,在大数据分析中扮演着至关重要的角色。本文将介绍如何利用Python语言中丰富的数据可视化工具,结合大数据分析,实现更直观、高效的数据展示与分析。
|
1月前
|
存储 NoSQL 大数据
新型数据库技术在大数据分析中的应用与优势探究
随着大数据时代的到来,传统数据库技术已经无法满足海量数据处理的需求。本文将探讨新型数据库技术在大数据分析中的应用情况及其所带来的优势,为读者解析数据库领域的最新发展趋势。
|
1月前
|
存储 分布式计算 大数据
现代化数据库技术——面向大数据的分布式存储系统
传统的关系型数据库在面对大规模数据处理时遇到了诸多挑战,而面向大数据的分布式存储系统应运而生。本文将深入探讨现代化数据库技术中的分布式存储系统,包括其优势、工作原理以及在大数据领域的应用。
|
2月前
|
分布式计算 DataWorks IDE
MaxCompute数据问题之忽略脏数据如何解决
MaxCompute数据包含存储在MaxCompute服务中的表、分区以及其他数据结构;本合集将提供MaxCompute数据的管理和优化指南,以及数据操作中的常见问题和解决策略。
47 0
|
2月前
|
SQL 存储 分布式计算
MaxCompute问题之下载数据如何解决
MaxCompute数据包含存储在MaxCompute服务中的表、分区以及其他数据结构;本合集将提供MaxCompute数据的管理和优化指南,以及数据操作中的常见问题和解决策略。
38 0
|
2月前
|
分布式计算 关系型数据库 MySQL
MaxCompute问题之数据归属分区如何解决
MaxCompute数据包含存储在MaxCompute服务中的表、分区以及其他数据结构;本合集将提供MaxCompute数据的管理和优化指南,以及数据操作中的常见问题和解决策略。
36 0