在 Linux 环境下 HDFS 出现“丢块(Missing Blocks / 块丢失)”,通常不是真的“凭空消失”,而是 NameNode 认为某些 Block 的副本都不存在了。下面按常见原因 → 排查思路 → 解决办法来说明。
dfs.namenode.heartbeat.recheck-interval 后标记为 missing✅ 表现:
hdfs fsck / -list-corruptfileblocks
dfs.datanode.data.dir 目录权限异常✅ 检查:
df -h
dmesg | grep error
ls -l /data/hdfs/dn
blk_* 文件current/ 目录⚠️ 这是最常见的“人为丢块”原因
decommissionfsimage / edits 损坏hdfs fsck / -list-corruptfileblocks
或:
hdfs dfsadmin -report
关注:
Missing blocks: X
Corrupt blocks: Y
hdfs fsck / -files -blocks -locations
systemctl start hadoop-datanode
如果文件不重要:
hdfs fsck / -delete
⚠️ 会删除损坏文件
从备份 / 其他集群拷贝 blk_* 到对应 DataNode,并修正元数据(不推荐新手)
hdfs dfs -setrep -R 3 /
✅ 生产建议:
blk_*decommission 下线节点如果你愿意,可以贴一下:
hdfs fsck 输出hdfs dfsadmin -report我可以帮你精确定位是哪一类丢块。