Ubuntu环境下HDFS数据恢复常见操作方法
HDFS的回收站功能可将删除的文件移动至用户目录下的.Trash文件夹(而非永久删除),默认保留时间为30天(可通过配置调整)。
core-site.xml文件,添加以下配置并重启HDFS服务:<property>
<name>fs.trash.interval</name>
<value>120</value> <!-- 单位:分钟,设置为0则禁用回收站 -->
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>60</value> <!-- 回收站检查点间隔,建议小于fs.trash.interval -->
</property>
/user/<username>/.Trash/Current/路径下,使用以下命令恢复至目标路径:hdfs dfs -cp /user/<username>/.Trash/Current/path/to/deleted_file /path/to/restore
HDFS快照是文件系统在某一时刻的只读副本,适用于数据被覆盖或删除的场景(需提前创建快照)。
hdfs dfsadmin -allowSnapshot /path/to/target_directory # 启用目录快照
hdfs dfs -createSnapshot /path/to/target_directory snapshot_name # 创建快照
hdfs dfs -cp /path/to/target_directory/.snapshot/snapshot_name/path/to/file /path/to/restore
HDFS具备数据冗余机制(默认3副本),可通过内置工具修复损坏或丢失的数据块。
hdfs fsck命令扫描文件系统,查看损坏块信息:hdfs fsck /path/to/check -files -blocks -locations # 检查指定路径的文件、块及副本位置
-recover参数尝试自动修复损坏的文件块:hdfs fsck /path/to/corrupted_file -recover # 修复指定文件
hdfs dfsadmin命令强制重新复制:hdfs dfsadmin -replicate /path/to/file_with_corrupted_blocks # 重新复制所有副本
定期备份是应对大规模数据丢失的关键手段,可通过以下方式恢复:
fsimage、edits文件)丢失,需从备份目录复制元数据至NameNode存储路径(需先停止HDFS服务):sudo systemctl stop hadoop-namenode
cp -r /backup/nn/* /dfs/nn/ # 替换为实际备份路径
chown -R hdfs:hdfs /dfs/nn/ # 恢复属组权限
sudo systemctl start hadoop-namenode
DistCp工具从备份集群或存储路径复制数据:hadoop distcp hdfs://backup-cluster:8020/backup/path hdfs://current-cluster:8020/restore/path # 跨集群恢复
hdfs dfs -put /local/backup/path /hdfs/restore/path # 本地备份恢复
若NameNode因元数据损坏无法启动,需通过Secondary NameNode的检查点或手动备份恢复:
sudo -u hdfs hdfs dfsadmin -safemode enter
sudo -u hdfs hdfs dfsadmin -saveNamespace
/backup/nn)复制元数据文件至NameNode存储路径,重启服务:cp -r /backup/nn/current/* /dfs/nn/current/ # 替换为实际备份路径
sudo systemctl restart hadoop-namenode
sudo -u hdfs hdfs dfsadmin -safemode leave # 退出安全模式
/var/log/hadoop-hdfs/)定位问题根源。