VirtualBox中Hadoop 3.2.0集群异常:仅NameNode运行
解决Hadoop 3.2.0集群DataNode无法启动并加入集群的问题
我来帮你分析下这个问题,从你的描述来看,核心配置(clusterID、hosts、XML配置文件)都没问题,但DataNode无法通过start-dfs.sh自动启动,单独启动也无法加入集群,大概率是一些容易忽略的细节导致的,试试下面的排查步骤:
1. 确认SSH免密登录是否完全生效
start-dfs.sh是通过SSH远程调用DataNode节点的启动命令,这一步最容易出问题:
- 在NameNode节点的hadoop用户下,执行
ssh datanode1.com和ssh datanode2.com,确保不需要输入密码就能直接登录到对应节点 - 如果登录失败,检查是否正确生成了SSH密钥对,并且把公钥添加到了所有DataNode节点的
~/.ssh/authorized_keys文件中 - 注意:要确保是hadoop用户的免密登录,不是root用户的,Hadoop进程都是以hadoop用户运行的
2. 检查Hadoop 3.x的workers文件配置
Hadoop 3.x版本默认不再使用slaves文件,而是改用workers文件来管理DataNode节点:
- 检查NameNode节点的
hadoop/etc/hadoop/目录下是否有workers文件,如果没有,直接复制slaves文件的内容到新建的workers文件中 - 或者在
hdfs-site.xml中添加配置指定slaves文件路径:
<property> <name>dfs.datanode.workers</name> <value>/home/hadoop/hadoop/etc/hadoop/slaves</value> </property>
- 修改后记得同步所有节点的配置文件
3. 查看DataNode节点的本地日志
你只查看了NameNode的日志,但DataNode无法加入集群的关键错误信息通常在DataNode自己的日志里:
- 登录到每个DataNode节点,查看
hadoop/logs/目录下的hadoop-hadoop-datanode-*.log文件 - 重点找包含
Connection refused、Permission denied、Invalid cluster ID这类关键词的日志,这些会直接告诉你连接失败的原因
4. 检查防火墙和端口连通性
Debian 9默认启用ufw防火墙,可能会阻止Hadoop节点间的通信:
- 临时关闭所有节点的防火墙测试:
sudo ufw disable - 然后重新执行
start-dfs.sh,看DataNode是否能启动并加入集群 - 如果生效,再按需开放Hadoop需要的端口(比如NameNode的9000、50070,DataNode的50010、50020等)
5. 确认所有节点的hosts文件完全一致
你只贴了NameNode的hosts配置,要确保所有DataNode节点的/etc/hosts和NameNode完全相同:
- 在每个DataNode节点执行
cat /etc/hosts,确认包含以下内容:
127.0.0.1 localhost 192.168.10.100 namenode.com namenode 192.168.10.161 datanode1.com datanode1 192.168.10.162 datanode2.com datanode2
- 建议把节点主机名的映射从localhost行中移除,避免Hadoop进程绑定到本地回环地址导致无法被其他节点访问
6. 检查数据目录权限和环境变量
- 确认所有节点的
/home/hadoop/data/nameNode和/home/hadoop/data/dataNode目录都是hadoop用户拥有:
ls -ld /home/hadoop/data/nameNode ls -ld /home/hadoop/data/dataNode
- 确保所有节点的
hadoop-env.sh中正确配置了JAVA_HOME,且路径一致(Hadoop 3.2.0需要Java 8,不要用更高版本):
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
7. 重新执行清理和格式化操作
如果上面的步骤都没问题,再彻底清理一遍重新来:
- 在所有节点停止Hadoop进程:
stop-all.sh(或者手动kill所有hadoop相关进程) - 删除所有节点的
/home/hadoop/data目录:rm -rf /home/hadoop/data - 在NameNode节点重新格式化:
hdfs namenode -format - 同步所有节点的配置文件(确保workers/slaves、XML配置完全一致)
- 重新启动集群:
start-dfs.sh
内容的提问来源于stack exchange,提问作者Math
相关产品推荐
相关产品推荐

