在 Linux 环境下 HDFS 出现“丢块(Missing Blocks / Corrupt Blocks)”异常,通常不是单一原因,而是多个环节叠加导致。下面按常见原因 → 原理 → 排查与处理系统说明。
HDFS 中一个文件被切分为多个 Block,每个 Block 默认有 3 个副本。
当出现以下情况之一,就会报:
Missing blocksUnder-replicated blocksCorrupt blocks丢块 ≠ 文件一定没了
但Missing Blocks 无法恢复 = 数据永久丢失
原因
结果
排查
jps
hdfs dfsadmin -report
典型表现
IOException: No space left on device
Disk failed
df -h 正常但 dmesg 有 I/O error原因
排查
dmesg | grep error
smartctl -a /dev/sdX
df -h
mount | grep ro
场景
结果
高危操作
rm -rf /dfs/dn/current/*
后果
原因
现象
fsck 报 missing错误示例
dfs.replication=5结果
结果
hdfs fsck / -files -blocks -locations
关注:
MISSINGCORRUPTUNDER_REPLICATEDhttp://namenode:9870/dfshealth.html#tab-overview
看:
hdfs dfsadmin -safemode leave
hdfs balancer
只能:
hdfs fsck / -delete
(删除损坏文件)
smartctldfs.replication=3
dfs.datanode.failed.volumes.tolerated=1
rm DataNode 目录Linux 上 HDFS 丢块,90% 是“磁盘 / DN 宕机 / 误操作”导致副本全失,而不是 HDFS 本身 bug。
如果你愿意,可以贴:
hdfs fsck 输出我可以帮你精确定位是哪一种丢块原因。