You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未启用安全的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 13:21:09