HDFS文件下载请求URL主机名转IP配置问题咨询
HDFS WebUI下载URL自动使用IP的配置方案
问题背景
通过NameNode WebUI生成的HDFS文件下载URL使用主机名(如http://hadoop04:9864/webhdfs/v1/test/delta-contribs.jar?op=OPEN&namenoderpcaddress=000.000.000.000:9000&offset=0)时,请求返回400 Bad Request错误;将主机名替换为对应IP后,请求可正常执行。集群架构为1个NameNode、1个兼具SecondaryNameNode的DataNode、3个独立DataNode,共5台服务器。
当前相关配置
NameNode的hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>4</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/hadoop/data/namenode</value> </property> <property> <name>dfs.namenode.http-address</name> <value>000.000.000.000:50070</value> </property> </configuration>
兼具SecondaryNameNode的DataNode的hdfs-site.xml
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>000.000.000.000:50090</value> </property> <property> <name>dfs.namenode.checkpoint.dir</name> <value>/usr/local/hadoop/data/secondarynamenode</value> </property> <property> <name>dfs.datanode.http-address</name> <value>000.000.000.000:9864</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/usr/local/hadoop/data/datanode</value> </property> <property> <name>dfs.replication</name> <value>4</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
独立DataNode的hdfs-site.xml
<configuration> <property> <name>dfs.datanode.http-address</name> <value>000.000.000.000:9864</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/usr/local/hadoop/data/datanode</value> </property> <property> <name>dfs.replication</name> <value>4</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
/etc/hosts配置
000.000.000.000 hadoop01 000.000.000.000 hadoop02 000.000.000.000 hadoop03 000.000.000.000 hadoop04 000.000.000.000 hadoop05
workers配置
000.000.000.000(hadoop02) 000.000.000.000(hadoop03) 000.000.000.000(hadoop04) 000.000.000.000(hadoop05)
解决配置步骤
1. 修改所有DataNode的网络绑定配置为实际IP
将每个DataNode的hdfs-site.xml中相关网络属性从000.000.000.000(实际为0.0.0.0)替换为节点的真实IP,以hadoop04为例:
<!-- 替换原有dfs.datanode.http-address,同时添加以下两个属性 --> <property> <name>dfs.datanode.address</name> <value>hadoop04的实际IP:50010</value> </property> <property> <name>dfs.datanode.http-address</name> <value>hadoop04的实际IP:9864</value> </property> <property> <name>dfs.datanode.ipc.address</name> <value>hadoop04的实际IP:50020</value> </property>
该配置强制DataNode绑定到指定IP,并向NameNode上报此IP,而非主机名。
2. 修正workers文件格式
将workers文件中的带注释格式修改为纯IP或主机名,每行一个:
hadoop02 hadoop03 hadoop04 hadoop05
或者直接使用IP:
hadoop02的实际IP hadoop03的实际IP hadoop04的实际IP hadoop05的实际IP
3. 重启HDFS集群
执行以下命令重启所有HDFS服务,使配置生效:
stop-dfs.sh start-dfs.sh
原理说明
问题根源是DataNode启动时绑定到0.0.0.0,会向NameNode上报自身主机名;若客户端(或WebUI访问者)无法解析该主机名,就会触发400错误。通过配置DataNode绑定并上报真实IP,NameNode生成下载URL时会直接使用IP地址,绕开主机名解析问题。
内容的提问来源于stack exchange,提问作者hi-inbeom
相关产品推荐
相关产品推荐

