在 Linux 环境下,HDFS 数据恢复的方式取决于数据丢失的原因以及集群配置(是否开启回收站、快照、冗余等)。下面按常见场景系统说明。
/user/<用户名>/.Trash/Current/
fs.trash.interval(如 360 分钟)hdfs dfs -ls /user/$(whoami)/.Trash/Current/
hdfs dfs -mv /user/$(whoami)/.Trash/Current/path/to/file /original/path/
hdfs dfs -expunge
✅ 适用于:hdfs dfs -rm 误删
hdfs dfs -ls /path/.snapshot
hdfs dfs -cp /path/.snapshot/snapshot_name/file /path/file
hdfs dfsadmin -allowSnapshot /path
hdfs dfs -createSnapshot /path snapshot_name
✅ 适用于:误删、误覆盖、批量修改
查看副本状态:
hdfs fsck /path -files -blocks -locations
hdfs dfs -setrep -R 3 /path
hdfs fsck / -delete
(仅删除无法恢复的坏块)
⚠️ 数据无法 100% 恢复,若所有副本均损坏
hdfs namenode -importCheckpoint
hdfs --daemon start namenode
hdfs namenode -restoreFailedStorage true
✅ 适用于:NameNode 崩溃、元数据损坏
skipTrash 删除的恢复方案如果执行了:
hdfs dfs -rm -skipTrash /path
✅ 回收站不可用,只能:
fs.trash.interval=1440
-skipTrash 使用权限fsck 与副本数| 场景 | 恢复方式 |
|---|---|
| rm 误删 | 回收站 |
| 覆盖/批量改 | 快照 |
| 节点宕机 | 自动副本 |
| 块损坏 | fsck |
| NN 故障 | HA / checkpoint |
| skipTrash | 备份/重算 |
如果你愿意,可以告诉我:
我可以给你精确命令级恢复方案。