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

Azure虚拟机Spark Docker中HDFS本地Windows访问超时问题排查

问题根源与解决方案

首先,那个未知IP 10.122.118.83并不是导致问题的根本原因——它只是你的Windows本地DNS解析sandbox主机名时返回的无效IP(大概率是本地DNS缓存或默认解析结果),和DataNode的真实IP无关。

你的核心问题出在Hadoop的重定向逻辑与网络配置不匹配上:

  • 当你通过Azure VM公网IP访问Namenode的50070端口时,Namenode返回307重定向,但它给出的DataNode地址是容器内部设置的主机名sandbox(因为你启动Docker时加了-h sandbox,且Hadoop配置fs.defaultFS为hdfs://sandbox:9000)。
  • 你的Windows本地无法正确解析sandbox到Azure VM的公网IP,所以会解析到无效的10.122.118.83,最终导致连接超时。
  • 而同资源组内的Azure机器能正常访问,是因为它们处于同一内网环境,可以将sandbox解析到VM的内网IP 10.0.0.7,从而正确连接DataNode。

下面是具体的修复步骤:

1. 修改Hadoop配置,让Namenode返回可外部访问的地址

进入你的Spark Docker容器,修改Hadoop的核心配置文件:

修改core-site.xml

找到${HADOOP_HOME}/etc/hadoop/core-site.xml,添加或更新以下配置:

<!-- 让客户端优先使用IP而非主机名访问DataNode -->
<property>
  <name>dfs.client.use.datanode.hostname</name>
  <value>false</value>
</property>
<!-- 将默认文件系统地址替换为Azure VM的公网IP -->
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://52.234.XXX.XXX:9000</value>
</property>

修改hdfs-site.xml

找到${HADOOP_HOME}/etc/hadoop/hdfs-site.xml,添加以下配置:

<!-- 关闭DataNode注册时的IP与主机名校验,避免因网络环境差异导致的注册失败 -->
<property>
  <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
  <value>false</value>
</property>

2. 重启Hadoop服务生效配置

在Docker容器内执行命令重启Hadoop:

stop-all.sh
start-all.sh

3. 验证修复效果

回到Windows本地重新执行curl命令:

curl -i -v -L http://52.234.XXX.XXX:50070/webhdfs/v1/user/helloworld.txt?op=OPEN

此时重定向地址会指向Azure VM的公网IP:50075,而非sandbox:50075,Windows就能正常连接DataNode了。

临时测试方案(可选)

如果只是临时验证功能,可以直接修改Windows的hosts文件(路径:C:\Windows\System32\drivers\etc\hosts),添加一行:

52.234.XXX.XXX  sandbox

这样Windows会强制将sandbox解析到你的Azure VM公网IP,也能解决问题,但这只是临时方案,长期建议修改Hadoop配置。

内容的提问来源于stack exchange,提问作者Alice LIU

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:18:11