HDFS回收站是内置的轻量级恢复功能,可将删除的文件移动到用户目录下的.Trash文件夹,保留一定时间(默认1天)。
core-site.xml配置文件,添加以下参数(单位:分钟,设为0则禁用回收站):<property>
<name>fs.trash.interval</name>
<value>120</value> <!-- 保留120分钟 -->
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>60</value> <!-- 每60分钟创建检查点 -->
</property>
重启HDFS服务使配置生效:systemctl restart hadoop-hdfs-namenode hadoop-hdfs-datanode。Current目录恢复至原路径或指定路径:hdfs dfs -cp /user/username/.Trash/Current/deleted_file /path/to/restore
若需恢复整个目录,替换deleted_file为目录名即可。快照是HDFS的只读时间点副本,创建后不影响数据写入,恢复时直接复制快照中的文件,效率高且安全。
hdfs dfs -allowSnapshot /test # 允许/test目录创建快照
hdfs dfs -put test.txt /test # 向目录中添加文件
hdfs fs -createSnapshot /test import_data # 创建名为import_data的快照
hdfs dfs -cp /test/.snapshot/import_data/test.txt /path/to/restore
快照创建后,即使原数据被覆盖或删除,仍可通过快照恢复。若回收站、快照均不可用(如元数据损坏、数据块丢失),需通过手动操作恢复,步骤较复杂,需谨慎执行。
systemctl stop hadoop-hdfs-namenode hadoop-hdfs-datanode
/var/lib/hadoop-hdfs/cache/hdfs/dfs/name)。将备份的元数据复制到新NameNode的数据目录,再启动服务即可。hdfs fsck命令检查丢失的块,并从其他DataNode复制:hdfs fsck / -files -blocks -locations # 查看丢失的块及位置
hdfs dfsadmin -recoverLease /path/to/file # 恢复租约(解决“租约超时”问题)
若自动复制失败,可使用hdfs balancer命令手动触发数据块均衡。hdfs fsck / -files -blocks -locations # 检查根目录下的所有文件、块及位置
hdfs fsck /path/to/corrupted_dir -delete # 删除损坏的文件(谨慎使用)
hadoop distcp hdfs://backup-cluster:8020/path/to/backup hdfs://current-cluster:8020/path/to/restore
适用于大规模数据恢复,支持并行传输。若上述方法无法恢复,可使用第三方工具(如R-Studio、MinIO),但需注意:
wget https://download.r-studio.org/r-studio-server-rhel-2023.09.1-462-x86_64.rpm
sudo yum install -y r-studio-server-rhel-2023.09.1-462-x86_64.rpm
systemctl start rstudio-server
登录R-Studio Web界面,创建恢复任务并选择HDFS分区扫描。hdfs dfsadmin -saveNamespace)和DataNode数据;启用快照功能保护重要目录;设置监控告警(如DataNode宕机、块丢失)。hdfs fsck)。