[O]Atlas版本适配改造(三)1.0.7+
# 背景说明
提示
在大数据平台集成 Hive 及周边生态组件(如 Atlas、Ranger、Trino 等)时,经常遇到某些 jar 包(比如 javax.ws.rs-api
)重复或版本不兼容,导致启动脚本异常、服务启动失败。
其中,import-hive.sh
是 Hive 组件集成脚本中 classpath 依赖过滤的关键节点。**一旦包冲突未及时排除,轻则偶发报错,重则服务无法拉起,影响整个平台的稳定运行。
**
# 为什么要把 javax.ws.rs-api-2.1.1.jar
排除?
- 多组件集成场景,Atlas、Ranger、Trino、Hive 各自携带 ws.rs 相关 jar,极易因版本不一致引发“类冲突”。
- classloader 加载机制,一旦发现同名类,容易出现
ClassCastException
、NoClassDefFoundError
等玄学问题,定位成本极高。 - 有的依赖冲突不是首次启动就暴露,只有在访问 REST 相关接口、或插件加载流程中才会暴雷。
注意
排查这类冲突如果靠经验或重装,往往会走很多弯路。直接在 classpath 构建环节把隐患 jar 排除掉,是最直接有效的解决方案。
# 具体调整内容
本轮脚本适配只需在 import-hive.sh
的 HIVE_CP_EXCLUDE_LIST
排除列表中,新增 javax.ws.rs-api-2.1.1.jar
,即可避免该
jar 被重复加载。
如下是完整 diff 示例,请对照你实际项目位置修改:
Index: addons/hive-bridge/src/bin/import-hive.sh
===================================================================
diff --git a/addons/hive-bridge/src/bin/import-hive.sh b/addons/hive-bridge/src/bin/import-hive.sh
--- a/addons/hive-bridge/src/bin/import-hive.sh
+++ b/addons/hive-bridge/src/bin/import-hive.sh
@@ -99,7 +99,7 @@
# Multiple jars in HIVE_CP_EXCLUDE_LIST can be added using "\|" separator
# Ex: HIVE_CP_EXCLUDE_LIST="jersey-multipart"
# exclude log4j libs from hive classpath to avoid conflict
-HIVE_CP_EXCLUDE_LIST="log4j-slf4j-impl\|log4j-1.2-api\|log4j-api\|log4j-core\|log4j-web"
+HIVE_CP_EXCLUDE_LIST="log4j-slf4j-impl\|log4j-1.2-api\|log4j-api\|log4j-core\|log4j-web\|javax.ws.rs-api-2.1.1.jar"
for i in $(find "${HIVE_HOME}/lib/" -name "*.jar" | grep -v "$HIVE_CP_EXCLUDE_LIST"); do
HIVE_CP="${HIVE_CP}:$i"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
如图,直接追加 ws.rs-api 排除项即可:
# 典型排查建议
排查点 | 建议操作 | 典型现象 |
---|---|---|
classpath 冲突 | 检查 import-hive.sh 生成的 classpath | 类已加载、ClassNotFound 等 |
JAR 包来源追踪 | find $HIVE_HOME -name 'ws.rs' | 多个 ws.rs-api jar |
日志关键词 | 搜索 ClassCastException、NoClassDefFoundError 等 | 启动报错,服务未拉起 |
依赖兼容性 | 检查依赖组件 jar 版本,做统一梳理 | 单独启动正常,集成后报错 |