Hadoop集群执行start-dfs.sh后Slave节点无法创建DataNode的问题求助
解决Windows双节点Hadoop集群DataNode绑定失败的问题
我之前在Windows环境搭建Hadoop双节点集群时也碰到过几乎一模一样的问题,结合你提供的报错信息和配置来看,核心问题出在DataNode的地址绑定配置以及主机名一致性上,下面给你一步步的解决方案:
一、错误原因分析
你看到的java.net.BindException: Cannot assign requested address: bind,本质是DataNode尝试绑定到指定的slaveVM1:9005(或slaveVM1:50475)地址时,系统无法完成这个绑定操作。可能的诱因包括:
- 配置里的主机名拼写不一致(比如报错里的
slave-VM1和配置里的slaveVM1、slave存在差异) - Windows环境下Hadoop绑定特定主机名时的解析或权限问题
- 端口被其他程序占用
二、具体解决方案
1. 修改DataNode绑定地址为0.0.0.0
把硬编码的主机名改成0.0.0.0,让DataNode自动绑定当前机器的所有可用IP地址,避免主机名解析带来的问题:
- 在
core-site.xml中修改:
<property> <name>dfs.datanode.http.address</name> <value>0.0.0.0:9005</value> </property>
- 在
hdfs-site.xml中修改(如果你需要保留HTTPS配置的话):
<property> <name>dfs.datanode.https.address</name> <value>0.0.0.0:50475</value> </property>
2. 统一主机名拼写,确保解析正确
检查所有配置文件和hosts文件中的主机名完全一致:
- 你提到
hosts里配置的是slaveVM1和masterVM2,但报错里出现了slave-VM1,还有移除的配置里写的是slave,这些拼写差异会导致解析失败 - 确保
slaves文件里的节点名称和hosts、配置文件里的完全统一(比如全部用slaveVM1)
3. 清理旧元数据并重新格式化集群
之前的启动失败可能留下了不一致的DataNode元数据,需要清理后重新初始化:
- 在Master节点执行
stop-all.sh(如果有服务在运行的话) - 删除Slave节点上的DataNode数据目录:
/C:/Hadoop/hadoop-3.2.2/data/datanode - 在Master节点执行
hdfs namenode -format(注意只需要执行一次,不要重复格式化) - 重新启动集群:
start-dfs.sh
4. 检查端口占用情况
用Windows命令行检查9005和50475端口是否被其他程序占用:
netstat -ano | findstr :9005 netstat -ano | findstr :50475
如果输出结果里有其他进程ID(PID),可以打开任务管理器结束对应的进程,或者修改Hadoop配置里的端口号。
三、额外注意事项
- 你配置的
hadoop.tmp.dir和数据目录路径用正斜杠是正确的,Windows下Hadoop支持这种写法 - 确保两台机器的
HADOOP_CONF_DIR环境变量配置一致,且配置文件同步(可以把Master的配置文件复制到Slave对应目录) - 虽然你已经配置了SSH免密,但可以再验证一次
ssh slaveVM1是否能无密码登录,避免集群通信问题
内容的提问来源于stack exchange,提问作者Patrick Schulz
相关产品推荐
相关产品推荐

