Ubuntu环境下Hadoop(HDFS)数据恢复方法
HDFS的回收站功能可将删除的文件移动至用户目录下的.Trash文件夹(而非永久删除),默认保留120分钟后自动清理。
core-site.xml配置文件,添加以下参数:<property>
<name>fs.trash.interval</name>
<value>120</value> <!-- 回收站保留时间(分钟),设为0则禁用 -->
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>120</value> <!-- 回收站检查间隔(分钟) -->
</property>
保存后重启HDFS服务使配置生效。/user/username/.Trash/Current/目录下,使用以下命令恢复至目标路径:hdfs dfs -cp /user/username/.Trash/Current/path/to/deleted_file /path/to/restore
HDFS快照是文件系统在某一时刻的只读副本,可快速恢复到快照创建时的状态。
hdfs dfsadmin -allowSnapshot /path/to/directory # 允许目录创建快照
hdfs dfs -createSnapshot /path/to/directory snapshot1 # 创建名为snapshot1的快照
hdfs dfs -cp /path/to/directory/.snapshot/snapshot1/path/to/file /path/to/restore
定期备份是应对严重数据丢失的关键。常见备份方式包括:
distcp工具跨集群复制:将备份集群的数据复制到当前集群,适用于大规模数据恢复:hadoop distcp hdfs://backup-namenode:8020/backup/path hdfs://current-namenode:8020/restore/path
hdfs fsck命令:检查并修复HDFS中的损坏或丢失数据块,语法如下:hdfs fsck /path/to/check -delete # -delete参数可删除损坏的块(谨慎使用)
distcp恢复数据块:若数据块丢失,可通过distcp从其他健康节点复制数据块至丢失节点。若未提前配置回收站或快照,可尝试使用extundelete工具恢复ext3/ext4文件系统中的删除文件(需停止HDFS服务以防止数据覆盖):
sudo apt-get install extundelete
/dev/sda1分区下的/path/to/deleted/file):sudo extundelete /dev/sda1 --restore-file /path/to/deleted/file
若DataNode宕机,HDFS会自动从其他副本节点复制数据块以维持冗余(默认3副本)。可通过以下命令检查DataNode状态并恢复:
hdfs dfsadmin -report # 查看DataNode状态
hdfs balancer # 触发数据均衡,确保副本分布合理