在 Linux 环境下使用 Hadoop(通常指 HDFS)进行数据恢复,需要根据数据丢失的原因和集群配置来选择不同方案。下面按常见场景系统说明。
hdfs dfs -ls /path/to/file
hdfs dfs -ls /user/root/.Trash
hdfs dfs -ls /path/to/dir/.snapshot
/user/<username>/.Trash/Current/
fs.trash.interval(如 1440 分钟 = 1 天)hdfs dfs -mv /user/root/.Trash/Current/path/to/file /target/path
✅ 适用于:
hdfs dfs -rmhdfs dfs -rm -r❌ 不适用于:
hdfs dfs -rm -skipTrashhdfs dfs -ls /path/.snapshot
hdfs dfsadmin -allowSnapshot /data
hdfs dfs -createSnapshot /data snap1
hdfs dfs -cp /data/.snapshot/snap1/lostfile /data/
✅ 优点:
查看副本状态:
hdfs fsck /path -files -blocks -locations
hdfs fsck /path -replicate
✅ 适用于:
fsimage + edits# 停止 NameNode
# 拷贝 fsimage
cp /path/to/fsimage /dfs/nn/current/
# 启动 NameNode
fsimageeditsVERSION⚠️ 无备份 = 几乎无法恢复
hdfs fsck / -list-corruptfiles
list_snapshots
restore_snapshot 'snapshot_name'
❌ 以下情况基本无法恢复:
-skipTrash 删除✅ 开启回收站
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
✅ 重要目录启用快照
✅ 定期备份 NameNode 元数据
✅ 副本数 ≥ 3
✅ 禁止 rm -rf 操作
你可以直接告诉我:
是 HDFS 文件被删?NameNode 出问题?还是磁盘坏了?