在 CentOS 上“恢复 HDFS 节点”通常分几种场景,下面按最常见情况给你说明,你可以对照自己的情况操作。
在 NameNode 上执行:
hdfs dfsadmin -report
看该 DataNode 是否 Dead。
在出问题的 CentOS 节点上:
# 使用 hadoop 用户
sudo -u hdfs /usr/hdp/current/hadoop-client/sbin/hadoop-daemon.sh start datanode
或(CDH/HDP 不同):
systemctl start hadoop-hdfs-datanode
tail -f /var/log/hadoop-hdfs/hdfs-datanode-*.log
日志中常见:
Incompatible clusterIDs
不要直接删数据目录(除非确认可丢)
从 NameNode 获取:
cat /dfs/nn/current/VERSION
修改 DataNode:
vi /dfs/dn/current/VERSION
把 clusterID 改成一致。
重启:
systemctl restart hadoop-hdfs-datanode
systemctl status hadoop-hdfs-namenode
systemctl start hadoop-hdfs-namenode
如果有 Secondary NameNode / Standby:
hdfs namenode -bootstrapStandby
如果是单节点:
hdfs namenode -format
⚠️ 会清空 HDFS 数据
hdfs dfsadmin -report
编辑:
/etc/hadoop/conf/dfs.hosts
确保包含该节点 hostname
刷新:
hdfs dfsadmin -refreshNodes
# 防火墙
systemctl stop firewalld
systemctl disable firewalld
# 磁盘
df -h
ls -l /dfs/dn
# 时间同步
ntpdate cn.pool.ntp.org
| 场景 | 操作 |
|---|---|
| DataNode 挂了 | 启动 datanode |
| clusterID 不一致 | 修改 VERSION |
| NameNode 挂 | 启动 / bootstrap |
| 节点被踢 | refreshNodes |
| 数据全丢 | format |
如果你能告诉我:
我可以直接给你精确命令。