HDFS(Hadoop Distributed File System)在Linux环境下的数据恢复需根据故障类型(如误删除、NameNode/DataNode故障、数据块损坏)和恢复手段(如回收站、快照、备份)分类处理。以下是具体流程:
在实施恢复前,需确保以下功能已启用,提升恢复效率和成功率:
core-site.xml配置回收站的保留时间和检查间隔,误删除文件会暂存至回收站,便于快速恢复。<property>
<name>fs.trash.interval</name>
<value>120</value> <!-- 保留时间(分钟) -->
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>120</value> <!-- 检查间隔(分钟) -->
</property>
hdfs dfsadmin -allowSnapshot /target_directory # 允许目录创建快照
hdfs dfs -createSnapshot /target_directory/snapshot_name # 创建快照
/user/username/.Trash/Current/目录下,使用-cp命令恢复至原路径。hdfs dfs -cp /user/username/.Trash/Current/deleted_file /original/path
hdfs dfs -cp /target_directory/.snapshot/snapshot_name/deleted_file /original/path
NameNode故障分为进程宕机和数据目录损坏两类:
/path/to/hadoop/logs/hadoop-*-namenode-*.log)定位原因(如GC overhead、OOM),修复后重启进程。stop-dfs.sh
cp -r /backup/namenode/data /path/to/namenode/data
start-dfs.sh
fsimage和edits日志(高风险操作)。hdfs dfsadmin -report # 查看DataNode状态
hdfs fsck / -files -blocks -locations # 检查数据块分布
hdfs balancer命令触发数据块再平衡,强制复制丢失的块。hdfs fsck命令扫描整个文件系统,列出损坏的数据块及其位置。hdfs fsck / -files -blocks -locations
debug recoverLease命令尝试恢复租约(适用于租约超时的块)。hdfs debug recoverLease /path/to/corrupt/file -retries 3
若未启用回收站、快照且无备份,可尝试编辑日志恢复:
edits日志,定位数据删除或损坏的时间点。fsimage备份中选取删除操作前的版本,初始化新集群并加载该fsimage。恢复完成后,需通过以下命令确认数据完整性和集群状态:
hdfs dfsadmin -report # 确认DataNode状态正常
hdfs fsck / -files -blocks -locations # 确认数据块无损坏、副本数达标
hdfs dfs -ls /path/to/restore # 确认恢复的文件存在
DistCp工具跨集群复制数据,或备份NameNode的fsimage和edits日志。以上流程覆盖了HDFS在Linux环境下的常见数据恢复场景,操作前需根据实际情况选择合适的方法,并在测试环境中验证步骤的正确性。