未启用安全的Apache Hadoop3集群中ATS Application API异常排查
Hadoop3 非安全集群ATS API用户为null导致权限问题排查方案
问题背景
未启用安全机制的Hadoop3集群中,访问ATS的TEZ_APPLICATION API(http://<ats-host>:<port>/ws/v1/timeline/TEZ_APPLICATION/)返回空结果{"entities":[]},同时后台报错:
org.apache.hadoop.yarn.exceptions.YarnException: null is not allowed to get the timeline entity { id: tez_application_
, type: TEZ_APPLICATION }.
当前已配置yarn.acl.enabled=true,相同配置在Hadoop2集群可正常运行,核心问题为API请求传入的用户为null。
1. 认证用户为null的原因
在非安全模式下,Hadoop3的ATS(Application Timeline Server)对匿名请求的处理逻辑较Hadoop2有变更:
- Hadoop3中,若未正确配置
hadoop.http.staticuser.user参数,ATS无法识别匿名请求的用户,直接返回null。 - 若ATS的
yarn.timeline-service.http-authentication.type配置为kerberos但集群未启用Kerberos,身份识别会失败,用户同样变为null。
2. 是否可修改该用户并加入ACL
可以通过两种方式解决:
方式一:配置默认匿名用户(推荐)
在core-site.xml中添加或修改参数,指定静态匿名用户:
<property> <name>hadoop.http.staticuser.user</name> <value>tez</value> <!-- 可根据实际集群用户调整,比如hadoop --> </property>
重启ATS服务后,匿名请求会自动使用该用户身份。接着将该用户加入ACL:
在yarn-site.xml中配置:
<property> <name>yarn.timeline-service.entity-group-fs.acl</name> <value>tez,admin</value> <!-- 加入配置的静态用户及其他需要权限的用户 --> </property>
再次重启ATS使配置生效。
方式二:临时允许所有用户访问(仅测试用)
若需快速验证,可在yarn-site.xml中开放全权限:
<property> <name>yarn.timeline-service.entity-group-fs.acl</name> <value>*</value> </property>
此方式会降低安全性,不建议生产环境使用。
3. 为何Hadoop2中无此问题
Hadoop2与Hadoop3的ATS身份认证逻辑存在本质差异:
- Hadoop2的ATS在非安全模式下,默认会将未认证请求自动映射为
dr.who用户,即使未配置静态用户参数,也不会出现用户为null的情况,配合yarn.acl.enabled=true可正常访问。 - Hadoop3优化了ATS的身份认证逻辑,移除了默认映射
dr.who的规则,必须显式配置hadoop.http.staticuser.user来指定匿名请求的用户,否则会触发用户为null的权限校验失败。
内容的提问来源于stack exchange,提问作者akash
相关产品推荐
相关产品推荐

