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

Hadoop 3.3.x开启Simple认证后NameNode启动及接口访问401问题

解决Hadoop 3.3.x开启Simple认证后的401认证失败问题

问题核心

配置Simple认证并关闭匿名访问后,Namenode与JournalNode、Standby Namenode之间的内部HTTP调用(如getJournal、imageTransfer端点)返回401错误,curl携带user.name参数访问JMX端点也失败;开启匿名访问则一切正常。

解决方案

1. 统一所有节点的core-site.xml配置

在所有集群节点(Namenode、JournalNode、Datanode等)的core-site.xml中补充完整认证配置,确保规则一致:

<!-- 已配置的Simple认证基础参数 -->
<property>
  <name>hadoop.http.authentication.type</name>
  <value>simple</value>
</property>
<property>
  <name>hadoop.http.authentication.simple.anonymous.allowed</name>
  <value>false</value>
</property>
<property>
  <name>hadoop.http.filter.initializers</name>
  <value>org.apache.hadoop.security.AuthenticationFilterInitializer</value>
</property>

<!-- 新增:指定允许通过认证的服务用户 -->
<property>
  <name>hadoop.http.authentication.simple.allowed.users</name>
  <value>hdfs,yarn,mapred</value>
</property>

该参数需包含集群核心服务的运行用户(如hdfs是Namenode、JournalNode的默认运行用户),多个用户用逗号分隔。

2. 确保服务进程以合法用户启动

所有Hadoop服务必须以hadoop.http.authentication.simple.allowed.users中指定的用户运行:

  • 切换到合法用户(如hdfs):
    su - hdfs
    
  • 执行服务启动命令,示例:
    hdfs namenode -format
    hdfs namenode
    hdfs journalnode
    

3. 修正curl访问的参数格式

Simple认证下,user.name需作为URL参数传递,正确的curl命令格式:

curl -s "http://localhost:9870/jmx?qry=Hadoop:service=NameNode,name=NameNodeStatus&user.name=hdfs"

注意user.name参数需与其他参数用&分隔,放在URL参数列表中。

4. 规范Standby Namenode的bootstrap操作

执行bootstrapStandby命令时,必须以hdfs用户运行,确保内部HTTP请求携带合法身份:

su - hdfs
hdfs namenode -bootstrapStandby

5. 验证JournalNode配置一致性

确认所有JournalNode的core-site.xml与Namenode完全一致,避免因配置差异导致跨节点访问认证失败。

问题原因

关闭匿名访问后,Hadoop HTTP服务会拦截未携带合法用户身份的请求。默认情况下,内部服务调用依赖进程运行的用户身份生成认证信息,若未配置允许的用户列表,或服务以非法用户启动,会导致内部请求被拒绝,返回401错误。

内容的提问来源于stack exchange,提问作者Abhishek Karigar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:35:19