Ubuntu环境下HDFS数据恢复方法
HDFS回收站是防止数据误删除的第一道防线,启用后删除的文件会暂存至用户.Trash目录,可在一定时间内恢复。
core-site.xml配置文件(通常位于/etc/hadoop/conf/),添加以下参数调整回收站保留时间及检查间隔:<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>
保存后重启HDFS服务使配置生效:sudo systemctl restart hadoop-namenode hadoop-datanode。username为当前用户,deleted_file为删除的文件路径):hdfs dfs -cp /user/username/.Trash/Current/deleted_file /path/to/restore
HDFS快照是某一时间点的只读副本,适合需要恢复到特定时间点的场景(如误操作、数据损坏)。
/test为目标目录,snapshot1为快照名称):hdfs dfs -allowSnapshot /test
hdfs dfs -createSnapshot /test snapshot1
import_data为快照名称):hdfs dfs -cp /test/.snapshot/snapshot1/lost_file /path/to/restore
HDFS内置fsck命令可检查并修复文件系统的一致性,解决数据块损坏或丢失问题。
/为根目录,可替换为目标路径):hdfs fsck / -files -blocks -locations
recoverLease命令尝试自动修复(替换/path/to/corrupt/block为损坏块路径):hdfs debug recoverLease /path/to/corrupt/block -retries 3
若自动修复失败,需手动从其他DataNode复制健康块(通过hdfs dfsadmin -reportMissingBlocks获取丢失块信息,再用hdfs balancer触发数据均衡)。定期备份是应对严重数据丢失的关键手段,常用工具为DistCp(跨集群复制工具)。
/backup目录)复制回原集群的目标路径(替换hdfs://backup-cluster:8020/backup为备份源路径,/target为恢复目标路径):hadoop distcp hdfs://backup-cluster:8020/backup /target
NameNode存储HDFS的元数据(如文件目录结构、块位置),其故障会导致集群不可用,需根据故障类型处理:
stop-dfs.sh
cp -r /path/to/secondary/namenode/data /path/to/namenode/data
start-dfs.sh
fsimage和edits文件),可将备份文件复制到NameNode的数据目录,重启集群。DataNode负责存储实际数据块,宕机会导致数据冗余降低,HDFS会自动从其他DataNode复制块以维持副本数。
hdfs fsck /检查丢失的块,等待集群自动复制(默认副本数为3,需确保集群中有足够健康节点)。hdfs balancer命令触发数据均衡,强制复制缺失的块。若上述方法均无效(如磁盘物理损坏、文件系统崩溃),可使用第三方工具恢复底层数据(需停止HDFS服务并卸载数据目录):
/path/to/hdfs/directory为HDFS数据目录,path/to/deleted/file为删除的文件路径):sudo extundelete /path/to/hdfs/directory --restore-file path/to/deleted/file