在 Linux 上配置和使用 HDFS(Hadoop Distributed File System)时,“丢数据”通常不是 HDFS 本身的 bug,而是配置不当、运维误操作或环境异常导致。下面按常见原因 → 表现 → 解决/规避系统说明。
dfs.replication 设置过低hdfs fsck / 出现 Missing blocks<property>
<name>dfs.replication</name>
<value>3</value>
</property>
df -h
hdfs dfsadmin -report
✅ 解决:
dfs.datanode.data.dir)IOException✅ 解决:
hdfs dfs -rm -r /user/data
✅ 开启回收站:
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
rm -rf /dfs/data/current/*
✅ 解决:
dfs.namenode.name.dir 只配一个目录✅ 正确配置:
<property>
<name>dfs.namenode.name.dir</name>
<value>/nn1,/nn2</value>
</property>
✅ 建议:
out.write(...)
// 忘记 out.close()
✅ 正确:
try (FSDataOutputStream out = fs.create(path)) {
out.write(...)
}
✅ 检查:
hdfs fsck / -list-corruptfileblocks
hdfs dfsadmin -safemode get
✅ 解决:
hdfs dfsadmin -safemode leave
| 原因 | 影响 |
|---|---|
| OOM Kill DataNode | 块写入中断 |
| 文件描述符耗尽 | 无法打开新块 |
| 时间不同步(NTP) | 心跳异常、误判宕机 |
| SELinux | 权限异常 |
✅ 建议:
ulimit -n 65536
ntpdate pool.ntp.org
# 1. 集群状态
hdfs dfsadmin -report
# 2. 文件完整性
hdfs fsck / -files -blocks -locations
# 3. 丢失块
hdfs fsck / -list-corruptfileblocks
# 4. 日志
tail -n 200 /var/log/hadoop-hdfs/hdfs-audit.log
HDFS 本身几乎不会“主动丢数据”,丢数据 90% 是因为:副本少、磁盘坏、误删、配置错、HA 没开。
如果你愿意,可以贴:
hdfs-site.xmlcore-site.xml我可以帮你精准定位是哪一类问题。