Linux下Hadoop数据恢复实操指南
一 恢复路径总览
二 常见场景与命令
误删文件或目录(回收站)
# 查看回收站内容(注意用户目录)
hdfs dfs -ls /user/<your_user>/.Trash/Current
# 恢复到原路径
hdfs dfs -mv /user/<your_user>/.Trash/Current/<path>/file /user/<your_user>/<path>/
快照恢复(Snapshot)
hdfs dfsadmin -allowSnapshot /path/to/dir
hdfs dfs -createSnapshot /path/to/dir snap_20251220
# 列出快照
hdfs dfs -ls /path/to/dir/.snapshot
# 文件级恢复
hdfs dfs -cp /path/to/dir/.snapshot/snap_20251220/file /path/to/dir/
# 目录级恢复(先备份现目录,再从快照拷回)
hdfs dfs -cp -r /path/to/dir/.snapshot/snap_20251220 /path/to/dir_bak
# 如需整目录回滚,可按需替换或重命名
副本缺失或块损坏(块修复)
hdfs fsck /path/to/file_or_dir -files -blocks -locations
hdfs dfs -setrep -w 3 /path/to/file_or_dir # 将副本数设为3并等待完成
hdfs debug recoverLease -path /path/to/file -retries 10
跨集群/跨环境恢复(备份与拉取)
hadoop distcp -m 50 hdfs://backup-nn:8020/backup/path /path/to/restore
三 NameNode与Hive元数据恢复
NameNode元数据(fsimage/edits)
sudo -u hdfs hdfs dfsadmin -safemode enter
sudo -u hdfs hdfs dfsadmin -saveNamespace
cp -r /dfs/nn /backup/nn_$(date +%F)
sudo -u hdfs hdfs dfsadmin -safemode leave
# 停止NameNode,备份现有元数据目录
mv /dfs/nn/current /dfs/nn/current.bak
# 拷回备份
cp -r /backup/nn_YYYY-MM-DD/current /dfs/nn/
chown -R hdfs:hdfs /dfs/nn/current
# 启动NameNode
Hive Metastore(关系型数据库,如MariaDB)
mysqldump -uroot -p --databases metastore > metastore_$(date +%F).sql
mysql -uroot -p < metastore_$(date +%F).sql
四 无法回收站或快照时的高风险方案
五 预防与运维建议