[O]Hive版本适配改造(二)1.0.0+
# Hive 适配 Spark 3.5.5 场景背景与典型问题
提示
在 Bigtop 集成体系下,Hive 3.1.x 默认绑定的 Spark 版本较低(如 2.4.x),如需升级到 Spark 3.5.5,涉及大量依赖适配,最核心的挑战就是跨版本 jar 冲突和依赖传递管理。
改造目标 | 说明 |
---|---|
Hive 版本 | 3.1.x(含 3.1.3/3.1.4) |
Spark 目标版本 | 3.5.5 |
编译方式 | Bigtop Gradle/Maven |
关键冲突点 | log4j、scala、spark-yarn 依赖、slf4j 路由、protobuf 版本 |
直接替换 spark 依赖极易引发编译失败,常见报错如 log4j/scala 兼容、类冲突、依赖排除失效等。
# 2. spark-client/pom.xml 关键依赖改造
引入 Spark 3.5.5 后,建议明确指定 spark-core 的依赖并对冲突组件进行排除,如图所示:
在 spark-client/pom.xml
相关 module 下,补充如下依赖,并对 log4j 进行 exclusion:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
</exclusion>
<!-- ... 其他 exclusion 如有冲突继续追加 -->
</dependency>
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
笔记
此处 log4j-slf4j2-impl
排除是为了解决新版 Spark 3.5.5 引入的 SLF4J 路由适配问题,避免旧版 log4j 依赖链失效或冗余绑定。
# 3. 根目录 pom.xml 的 dependencyManagement 管控
很多核心依赖建议统一在根 pom.xml
的 dependencyManagement
块下显式声明,避免多模块冲突:
追加内容示例:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>${log4j2.version}</version>
</dependency>
<!-- 如有额外依赖也可统一声明 -->
</dependencies>
</dependencyManagement>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
提示
统一管理 log4j2 相关依赖可以显著减少多模块版本不一致、类冲突等隐患,实际维护和后续升级也更方便。