Atlas-Ranger-StringUtils缺失
在当前环境中 Atlas 虽然可以正常启动,但在 Ranger Atlas Plugin 激活后,日志里仍会出现一些不太理想的报错。
这些报错不会导致 Atlas 无法启动,但属于 必须记录、后续需要优化 的问题类型。

本文目标
- 复现报错
- 解释原因
- 给出修复方法
# 一、报错日志复现
在执行 install_ranger_atlas_plugin 相关任务时,Ambari 会调用 Credential Helper 生成 Keystore 凭证。
日志如下(关键片段保留):
2025-11-13 22:22:33,657 - Changing group for /tmp/tmp1763043753.657135_363 from 0 to hadoop
2025-11-13 22:22:33,657 - Changing permission for /tmp/tmp1763043753.657135_363 from 644 to 744
2025-11-13 22:22:33,657 - Moving /tmp/tmp1763043753.657135_363 to /usr/bigtop/current/atlas-server/conf/ranger-policymgr-ssl.xml
2025-11-13 22:22:33,670 - 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', 'sslKeyStore', '-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/lang3/StringUtils
at org.apache.hadoop.metrics2.lib.MutableMetricsFactory.getName(MutableMetricsFactory.java:134)
at org.apache.hadoop.metrics2.lib.MutableMetricsFactory.getInfo(MutableMetricsFactory.java:130)
at org.apache.hadoop.metrics2.lib.MutableMetricsFactory.newForField(MutableMetricsFactory.java:45)
at org.apache.hadoop.metrics2.lib.MetricsSourceBuilder.add(MetricsSourceBuilder.java:147)
at org.apache.hadoop.metrics2.lib.MetricsSourceBuilder.<init>(MetricsSourceBuilder.java:69)
at org.apache.hadoop.metrics2.lib.MetricsAnnotations.newSourceBuilder(MetricsAnnotations.java:43)
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.register(MetricsSystemImpl.java:223)
at org.apache.hadoop.metrics2.MetricsSystem.register(MetricsSystem.java:71)
at org.apache.hadoop.security.UserGroupInformation$UgiMetrics.create(UserGroupInformation.java:149)
at org.apache.hadoop.security.UserGroupInformation.<clinit>(UserGroupInformation.java:265)
at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:3746)
at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:3736)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3520)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:540)
at org.apache.hadoop.fs.Path.getFileSystem(Path.java:365)
at org.apache.hadoop.security.alias.KeyStoreProvider.initFileSystem(KeyStoreProvider.java:84)
at org.apache.hadoop.security.alias.AbstractJavaKeyStoreProvider.<init>(AbstractJavaKeyStoreProvider.java:85)
at org.apache.hadoop.security.alias.KeyStoreProvider.<init>(KeyStoreProvider.java:49)
at org.apache.hadoop.security.alias.JavaKeyStoreProvider.<init>(JavaKeyStoreProvider.java:42)
at org.apache.hadoop.security.alias.JavaKeyStoreProvider.<init>(JavaKeyStoreProvider.java:35)
at org.apache.hadoop.security.alias.JavaKeyStoreProvider$Factory.createProvider(JavaKeyStoreProvider.java:68)
at org.apache.hadoop.security.alias.CredentialProviderFactory.getProviders(CredentialProviderFactory.java:91)
at org.apache.ranger.credentialapi.CredentialReader.getDecryptedString(CredentialReader.java:74)
at org.apache.ranger.credentialapi.buildks.createCredential(buildks.java:87)
at org.apache.ranger.credentialapi.buildks.main(buildks.java:41)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils
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)
... 25 more
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
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
关键报错
java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
说明 ranger-atlas 插件 classpath 中 缺少 commons-lang3。
# 1、报错行为总结
| 行为 | 说明 |
|---|---|
| CredentialHelper 初始化失败 | 因缺失依赖 |
| Ranger SSL keystore alias 无法创建 | 依赖 CredentialHelper |
| Atlas 最终能启动 | 此报错不阻断主流程 |
| 功能不完整 | plugin 功能不完全生效 |
# 二、问题定位:commons-lang3 缺失
Atlas 的 Ranger Plugin 会调用:
ranger_credential_helper.py- 进而执行
org.apache.ranger.credentialapi.buildks
而这条链路依赖:
org.apache.commons.lang3.StringUtils
1
正常情况下,commons-lang3 应该存在于:
/usr/bigtop/3.2.0/usr/lib/ranger-atlas-plugin/install/lib/
1
但当前构建中,该目录缺少:
commons-lang3-*.jar
1
为什么缺?
因为 bigtop+ranger+atlas 组合构建中,部分插件的依赖并不会自动继承,需要手动补齐。 这是 构建逻辑的问题,不是 Ambari 的问题。
# 三、修复方式:补齐 commons-lang3.jar(可立即生效)
直接从其他 ranger 插件目录复制即可,如 ranger-yarn-plugin 中包含完整依赖:
cp /usr/bigtop/3.2.0/usr/lib/ranger-yarn-plugin/install/lib/commons-lang3-3.12.0.jar \
/usr/bigtop/3.2.0/usr/lib/ranger-atlas-plugin/install/lib/
1
2
2
完成后:
- 重启 Atlas
- 执行 Ranger Atlas Plugin 初始化逻辑
- CredentialHelper 不再报错
说明
commons-lang3 版本号可根据环境调整,但建议保持 Ranger 系列插件版本一致,避免兼容性问题。