在 CentOS 上运行 HDFS 出现“丢数据”的情况,通常不是 HDFS 本身随机丢文件,而是配置、运维或环境异常导致的。下面按常见原因 → 表现 → 解决/排查方法系统说明。
原因
表现
Corrupt blockhdfs fsck 发现 missing blockIOException: No space left 或 read error排查
dmesg | grep error
smartctl -a /dev/sdX
df -h
mount | grep ro
解决
dfs.datanode.data.dir 多目录原因
dfs.replication=1表现
hdfs fsck / 显示 Under-replicated blocks解决
hdfs dfs -setrep -R 3 /
并确保 DataNode 数量 ≥ 副本数
原因
kill -9 NameNode/DataNodestop-dfs.sh表现
解决
hdfs namenode -recover错误示例
<value>/data1,/data2</value>
但 /data2 不存在或权限不对
结果
检查
ls -ld /data1 /data2
hdfs dfsadmin -report
原因
dfs.datanode.du.reserved结果
解决
<property>
<name>dfs.datanode.du.reserved</name>
<value>10737418240</value> <!-- 10GB -->
</property>
hdfs dfs -rm -r /user/data
解决
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
hdfs namenode -format
后果
必须通过元数据备份恢复
排查
getenforce
systemctl status firewalld
ntpdate -u pool.ntp.org
hdfs fsck / -files -blocks -locations
MISSING → 真丢UNDER REPLICA → 可恢复CORRUPT → 块损坏CentOS 上 HDFS“丢数据”几乎不是 HDFS bug,而是:
- 磁盘问题
- 副本不足
- 配置错误
- 非正常运维
如果你愿意,可以告诉我:
我可以帮你精准定位是哪一类原因。