[B] Impala 版本适配改造(三)
# 第二步:Relocated Jar 兼容修复
本节聚焦在 Hadoop 3.3.4 升级后引入的 relocated jar 路径变动问题,例如 protobuf、guava 这些常用依赖,经常在大版本升级后出现包名变化或 shaded jar 的“重定位”现象,导致 Impala 源码无法直接编译通过。
场景在 Hadoop3 适配中极为常见,务必引起重视!
# 改造核心说明
提示
主要修复思路为统一依赖路径,全部切换为新版兼容的 groupId,同时修正 pom.xml
依赖与实际 import 路径,避免
shaded/repackaged 引起的类冲突。
本补丁具体修复点如下:
变更项 | 说明 |
---|---|
commons-lang | 从 org.apache.commons.lang ➡️ org.apache.commons.lang3 |
protobuf Struct | 从 com.cloudera.cloud.storage.relocated.protobuf ➡️ com.google.protobuf |
guava Lists | 从 org.apache.iceberg.relocated.com.google.common.collect ➡️ com.google.common.collect |
fe/pom.xml 依赖 | 新增 protobuf-java 3.19.1 明确版本依赖,兼容新 Hadoop3 生态 |
# 架构理解
下面这张图可以直观理解Impala 构建依赖链路下 relocated jar 的影响路径:
- 最终目的是所有依赖的实际类加载都能走新版的标准路径,消除 shaded 包冲突
笔记
类似的 relocated jar 问题,在 Hadoop 3.x 生态(尤其是 Spark、Flink、HBase)也大量存在,建议养成遇到编译期依赖冲突时,优先核查 jar 包重定位和 groupId 变更。
# 补丁文件与内容
位置:
bigtop-packages/src/common/impala/patch1-RELOCATED-JAR-FIXED.diff
内容如下:
Subject: [PATCH] optimized: 处理hadoop 3.3.4 不兼容问题
---
Index: java/TableFlattener/src/main/java/org/apache/impala/infra/tableflattener/SchemaFlattener.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/java/TableFlattener/src/main/java/org/apache/impala/infra/tableflattener/SchemaFlattener.java b/java/TableFlattener/src/main/java/org/apache/impala/infra/tableflattener/SchemaFlattener.java
--- a/java/TableFlattener/src/main/java/org/apache/impala/infra/tableflattener/SchemaFlattener.java (revision 57b8347ef66abdb645badf925d8150e2a32f0e44)
+++ b/java/TableFlattener/src/main/java/org/apache/impala/infra/tableflattener/SchemaFlattener.java (date 1740982071128)
@@ -23,7 +23,7 @@
import org.apache.avro.Schema.Field;
import org.apache.avro.Schema.Type;
import org.apache.avro.generic.GenericRecord;
-import org.apache.commons.lang.NotImplementedException;
+import org.apache.commons.lang3.NotImplementedException;
import org.apache.hadoop.conf.Configuration;
import org.kitesdk.data.Dataset;
import org.kitesdk.data.DatasetDescriptor;
Index: fe/src/main/java/org/apache/impala/util/IcebergMetadataScanner.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/fe/src/main/java/org/apache/impala/util/IcebergMetadataScanner.java b/fe/src/main/java/org/apache/impala/util/IcebergMetadataScanner.java
--- a/fe/src/main/java/org/apache/impala/util/IcebergMetadataScanner.java (revision 57b8347ef66abdb645badf925d8150e2a32f0e44)
+++ b/fe/src/main/java/org/apache/impala/util/IcebergMetadataScanner.java (date 1740966368026)
@@ -17,7 +17,7 @@
package org.apache.impala.util;
-import com.cloudera.cloud.storage.relocated.protobuf.Struct;
+import com.google.protobuf.Struct;;
import com.google.common.base.Preconditions;
import java.util.Iterator;
Index: fe/src/main/java/org/apache/impala/util/IcebergSchemaConverter.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/fe/src/main/java/org/apache/impala/util/IcebergSchemaConverter.java b/fe/src/main/java/org/apache/impala/util/IcebergSchemaConverter.java
--- a/fe/src/main/java/org/apache/impala/util/IcebergSchemaConverter.java (revision 57b8347ef66abdb645badf925d8150e2a32f0e44)
+++ b/fe/src/main/java/org/apache/impala/util/IcebergSchemaConverter.java (date 1740970508500)
@@ -30,7 +30,7 @@
import org.apache.iceberg.PartitionSpec;
import org.apache.iceberg.Schema;
import org.apache.iceberg.hive.HiveSchemaUtil;
-import org.apache.iceberg.relocated.com.google.common.collect.Lists;
+import com.google.common.collect.Lists;
import org.apache.iceberg.types.Types;
import org.apache.impala.analysis.IcebergPartitionField;
import org.apache.impala.analysis.IcebergPartitionSpec;
Index: fe/src/main/java/org/apache/impala/util/MigrateTableUtil.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/fe/src/main/java/org/apache/impala/util/MigrateTableUtil.java b/fe/src/main/java/org/apache/impala/util/MigrateTableUtil.java
--- a/fe/src/main/java/org/apache/impala/util/MigrateTableUtil.java (revision 57b8347ef66abdb645badf925d8150e2a32f0e44)
+++ b/fe/src/main/java/org/apache/impala/util/MigrateTableUtil.java (date 1740970508491)
@@ -40,7 +40,7 @@
import org.apache.iceberg.Table;
import org.apache.iceberg.catalog.TableIdentifier;
import org.apache.iceberg.data.TableMigrationUtil;
-import org.apache.iceberg.relocated.com.google.common.collect.Lists;
+import com.google.common.collect.Lists;
import org.apache.impala.analysis.TableName;
import org.apache.impala.catalog.FeCatalog;
import org.apache.impala.catalog.FeFsPartition;
Index: fe/pom.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/fe/pom.xml b/fe/pom.xml
--- a/fe/pom.xml (revision 57b8347ef66abdb645badf925d8150e2a32f0e44)
+++ b/fe/pom.xml (date 1740984830952)
@@ -613,6 +613,12 @@
<version>1.72</version>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>com.google.protobuf</groupId>
+ <artifactId>protobuf-java</artifactId>
+ <version>3.19.1</version>
+ </dependency>
</dependencies>
<reporting>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
- 01
- bigtop-select 打包缺 compat 报错修复 deb07-16
- 02
- bigtop-select 打包缺 control 文件报错修复 deb07-16
- 03
- 首次编译-环境初始化 必装07-16