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

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 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的包:

下一章 核心概念

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
打赏
0
0
0
0
111
分享
相关文章
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
128 79
基于阿里云大数据平台的实时数据湖构建与数据分析实战
在大数据时代,数据湖作为集中存储和处理海量数据的架构,成为企业数据管理的核心。阿里云提供包括MaxCompute、DataWorks、E-MapReduce等在内的完整大数据平台,支持从数据采集、存储、处理到分析的全流程。本文通过电商平台案例,展示如何基于阿里云构建实时数据湖,实现数据价值挖掘。平台优势包括全托管服务、高扩展性、丰富的生态集成和强大的数据分析工具。
【赵渝强老师】Spark RDD的依赖关系和任务阶段
Spark RDD之间的依赖关系分为窄依赖和宽依赖。窄依赖指父RDD的每个分区最多被一个子RDD分区使用,如map、filter操作;宽依赖则指父RDD的每个分区被多个子RDD分区使用,如分组和某些join操作。窄依赖任务可在同一阶段完成,而宽依赖因Shuffle的存在需划分不同阶段执行。借助Spark Web Console可查看任务的DAG图及阶段划分。
108 15
大数据揭秘:从数据湖到数据仓库的全面解析
大数据揭秘:从数据湖到数据仓库的全面解析
104 19
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
267 2
从数据小白到大数据达人:一步步成为数据分析专家
从数据小白到大数据达人:一步步成为数据分析专家
273 92
从湖仓分离到湖仓一体,四川航空基于 SelectDB 的多源数据联邦分析实践
川航选择引入 SelectDB 建设湖仓一体大数据分析引擎,取得了数据导入效率提升 3-6 倍,查询分析性能提升 10-18 倍、实时性提升至 5 秒内等收益。
从湖仓分离到湖仓一体,四川航空基于 SelectDB 的多源数据联邦分析实践
数据让农业更聪明——用大数据激活田间地头
数据让农业更聪明——用大数据激活田间地头
26 2
数据的“潘多拉魔盒”:大数据伦理的深度思考
数据的“潘多拉魔盒”:大数据伦理的深度思考
78 25
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等