在 CentOS 上“修复 HDFS”需先明确故障类型,不同问题修复方式完全不同。下面按常见故障场景给你一套实用排查与修复手册(以 Hadoop 2.x / 3.x 为例)。
# 1. 检查 Java
java -version
# 2. 检查 Hadoop 环境变量
echo $HADOOP_HOME
echo $HDFS_NAMENODE_USER
# 3. 检查进程
jps
正常应有:
# 查看日志
tail -200 $HADOOP_HOME/logs/hadoop-*-namenode-*.log
若看到:
NameNode is not formatted
✅ 修复(⚠会清空数据,仅测试环境):
hdfs namenode -format
✅ 生产环境(有数据):
dfs.namenode.name.dir 备份ls -ld /data/hadoop/dfs/name
修复:
chown -R hdfs:hadoop /data/hadoop/dfs
chmod 700 /data/hadoop/dfs/name
# NameNode
cat $HADOOP_HOME/dfs/name/current/VERSION
# DataNode
cat $HADOOP_HOME/dfs/data/current/VERSION
若 clusterID 不同:
✅ 修复(保留数据):
# 修改 DataNode 的 VERSION 中 clusterID 与 NameNode 一致
vi $HADOOP_HOME/dfs/data/current/VERSION
重启:
systemctl restart hadoop-datanode
df -h
清理或调整:
<property>
<name>dfs.datanode.du.reserved</name>
<value>10737418240</value> <!-- 10G -->
</property>
hdfs fsck / -list-corruptfileblocks
hdfs fsck / -delete
hdfs debug recoverLease -path /path/file -retries 3
hdfs dfsadmin -safemode get
强制退出(确认无数据丢失):
hdfs dfsadmin -safemode leave
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
yum install -y ntp
systemctl enable ntpd
ntpdate pool.ntp.org
logs/*.log)jps 确认角色fsck 查块你可以告诉我:
我可以直接给你对应修复命令。