Atlas-Ranger-commons-compress缺失
在 Atlas 与 Ranger 集成场景中,Ranger Atlas Plugin 在生成 SSL TrustStore 的 keystore 时,再次暴露出依赖缺失的问题。
继 commons-lang3 缺失 之后,这次报错来自:
commons-compress(TarArchiveInputStream)缺失
虽然不会导致 Atlas 服务完全不可启动,但会造成:
- Ranger Atlas Plugin 初始化不完整
- SSL TrustStore alias 创建失败
- 部分安全策略无法生效
因此本篇记录完整流程,作为 Atlas-Ranger 集成调试的第二篇优化文章。
# 一、报错日志复现
在 Ambari 执行 Ranger Atlas Plugin 设置过程时,会调用:
ranger_credential_helper.py
1
2
3
2
3
用于生成 truststore keystore(sslTrustStore)。
以下为关键日志片段:
2025-11-13 22:30:18,310 - Execute[('/usr/bigtop/3.2.0/usr/lib/ranger-atlas-plugin/ranger_credential_helper.py', '-l', '/usr/bigtop/3.2.0/usr/lib/ranger-atlas-plugin/install/lib/*', '-f', '/etc/ranger/aaa_atlas/cred.jceks', '-k', 'sslTrustStore', '-v', [PROTECTED], '-c', '1')] {'environment': {'JAVA_HOME': '/opt/modules/jdk1.8.0_202'}, 'logoutput': True, 'sudo': True}
Using Java:/opt/modules/jdk1.8.0_202/bin/java
Error creating Alias!! Error: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/compress/archivers/tar/TarArchiveInputStream
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:979)
at org.apache.hadoop.fs.RawLocalFileSystem$LocalFSFileOutputStream.<init>(RawLocalFileSystem.java:324)
at org.apache.hadoop.fs.RawLocalFileSystem$LocalFSFileOutputStream.<init>(RawLocalFileSystem.java:294)
at org.apache.hadoop.fs.RawLocalFileSystem.createOutputStreamWithMode(RawLocalFileSystem.java:439)
at org.apache.hadoop.fs.RawLocalFileSystem.create(RawLocalFileSystem.java:428)
at org.apache.hadoop.fs.RawLocalFileSystem.create(RawLocalFileSystem.java:459)
at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSOutputSummer.<init>(ChecksumFileSystem.java:433)
at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:521)
at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:500)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:1195)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:1175)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:1064)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:1052)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:728)
at org.apache.hadoop.security.alias.KeyStoreProvider.getOutputStreamForKeystore(KeyStoreProvider.java:54)
at org.apache.hadoop.security.alias.AbstractJavaKeyStoreProvider.flush(AbstractJavaKeyStoreProvider.java:292)
at org.apache.hadoop.security.alias.CredentialShell$CreateCommand.execute(CredentialShell.java:447)
at org.apache.hadoop.tools.CommandShell.run(CommandShell.java:72)
at org.apache.ranger.credentialapi.buildks.createKeyStore(buildks.java:163)
at org.apache.ranger.credentialapi.buildks.createCredential(buildks.java:93)
at org.apache.ranger.credentialapi.buildks.main(buildks.java:41)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.compress.archivers.tar.TarArchiveInputStream
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 21 more
2025-11-13 22:30:19,507 - File['/etc/ranger/aaa_atlas/cred.jceks'] {'owner': 'atlas', 'group': 'hadoop', 'mode': 0o640}
2025-11-13 22:30:19,507 - Changing owner for /etc/ranger/aaa_atlas/cred.jceks from 0 to atlas
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
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
关键报错说明
缺失:
org.apache.commons.compress.archivers.tar.TarArchiveInputStream
1
此类属于 commons-compress 包。
# 1、错误影响范围
| 影响项 | 说明 |
|---|---|
| CredentialHelper 创建 alias 失败 | 无法写入 keystore |
| Ranger Atlas Plugin 初始化失败 | truststore 无法注册 |
| Atlas 可继续启动 | 但 Ranger 侧会缺失联动能力 |
| Kerberos 配置链不完整 | 涉及 SSL+cred 生成的流程 |
# 二、根因分析:ranger-atlas-plugin classpath 缺少 commons-compress
# 1、运行链路说明
调用链:
ranger_credential_helper.py
→ org.apache.ranger.credentialapi.buildks
→ Hadoop FileSystem
→ KeyStoreProvider
→ commons-compress TarArchiveInputStream
1
2
3
4
5
2
3
4
5
其中关键点在于:
- buildks 的内部逻辑依赖 Hadoop 的文件处理能力
- Hadoop 的部分读取/解压模块依赖 commons-compress
- ranger-atlas-plugin 的 install/lib 内 没有 commons-compress
因此触发:
NoClassDefFoundError → ClassNotFoundException
# 2、依赖缺失来源
当前 bigtop+ranger+atlas 集成包中:
/usr/bigtop/3.2.0/usr/lib/ranger-atlas-plugin/install/lib/
1
目录下默认仅包含:
- ranger 相关 jar
- hadoop 依赖的部分子集
- 但 缺少 commons-compress(1.20/1.21/1.22 均可)
而 ranger-yarn-plugin 或 ranger-hdfs-plugin 通常会携带更全的依赖包,因此可作为“依赖源”。
# 三、修复方案:补齐 commons-compress.jar
直接从其他插件目录拷贝即可。
例如 ranger-yarn-plugin 中包含 commons-compress-1.21.jar:
cp /usr/bigtop/3.2.0/usr/lib/ranger-yarn-plugin/install/lib/commons-compress-1.21.jar \
/usr/bigtop/3.2.0/usr/lib/ranger-atlas-plugin/install/lib/
1
2
2
然后通过 Ambari 重启 Atlas 服务。
说明
该修复为立即生效型,重启后 keystore alias 会顺利创建,不会再次报错。