在 Linux + Hadoop 的环境下,“丢数据”通常不是单一原因,而是配置、运维、磁盘、网络或程序使用方式出了问题。下面按常见原因 → 现象 → 解决建议来说明。
原因
dfs.replication 设置过低(如 1)现象
hdfs dfsadmin -report 中 Under-Replicated 很多解决
hdfs dfs -setrep -R 3 /
并确保 DataNode 数量 ≥ 副本数
原因
hdfs dfs -rm -r现象
解决
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
原因
No space left on device)现象
排查
df -h
dmesg | grep error
cat /proc/mounts
解决
原因
现象
BlockUnderConstructionIOException解决
dfs.client.socket-timeout
dfs.datanode.socket.write.timeout
原因
现象
解决
fsimage原因
close()现象
正确写法(Java)
FSDataOutputStream out = fs.create(path);
out.write(data);
out.hflush(); // 或 hsync()
out.close();
常见历史问题
建议
hdfs fsck / -files -blocks -locations
看是否有:
MISSINGCORRUPTHadoop 丢数据,90% 不是 Hadoop 的锅,而是:副本不够、磁盘坏了、网络断了、误删了、程序写错了。
如果你愿意,可以告诉我:
我可以帮你精准定位。