Hadoop在Linux环境下的数据恢复需结合内置机制(如回收站、快照)、工具命令(如fsck、DistCp)及备份策略,以下是具体方法:
HDFS的回收站功能可将删除的文件移动至用户目录下的.Trash/Current文件夹(而非立即删除),恢复时只需将文件从回收站复制回原路径。
core-site.xml中添加以下配置(设置回收站保留时间为120分钟):<property>["是", "fs.trash.interval", "120"]</property>
<property>["是", "fs.trash.checkpoint.interval", "120"]</property>
hdfs dfs命令将文件从回收站复制回目标路径:hdfs dfs -cp /user/username/.Trash/Current/deleted_file /path/to/restore
快照是HDFS目录或文件的只读时间点副本,适合需要快速恢复到特定状态的场景。
hdfs dfsadmin -allowSnapshot /testhdfs # 允许目录创建快照
hdfs dfs -createSnapshot /testhdfs snapshot1 # 创建名为snapshot1的快照
copyFromSnapshot命令将快照中的文件复制到目标路径:hdfs dfs -copyFromSnapshot /testhdfs/snapshot1 /path/to/restore
若NameNode故障(如宕机),可通过Secondary NameNode或备份恢复元数据:
stop-dfs.sh # 停止HDFS集群
cp -r /path/to/secondary/namenode/data /path/to/namenode/data # 复制Secondary数据到Primary目录
start-dfs.sh # 启动HDFS集群
stop-dfs.sh
cp -r /path/to/backup/namenode/data /path/to/namenode/data
start-dfs.sh
fsck(File System Check)是HDFS内置的文件系统检查工具,可检测并修复丢失或损坏的数据块。
hdfs fsck /path/to/check -files -blocks -locations
参数说明:
-files:显示文件列表;-blocks:显示数据块信息;-locations:显示数据块的位置。-move(将损坏块移至lost+found)或-delete(删除损坏块)选项处理,再通过数据复制恢复:hdfs dfsadmin -reportMissingBlocks # 获取丢失块信息
hdfs balancer # 触发数据块平衡,自动复制丢失块
DistCp(Distributed Copy)是基于MapReduce的分布式复制工具,适合从备份集群或本地文件系统恢复大量数据。
hadoop distcp hdfs://backup-cluster:9000/backup_path hdfs://target-cluster:9000/recovered_path
或从本地文件系统恢复:hadoop distcp file:///local/backup/path hdfs://target-cluster:9000/recovered_path
对于ext3/ext4文件系统的误删除文件,可使用extundelete工具(需在删除后未写入新数据的情况下使用):
sudo apt-get install extundelete
/recovered目录):sudo extundelete /dev/sda1 --restore-all --output-dir /recovered
DistCp或第三方工具(如Cloudera Manager、Apache Ambari)定期备份NameNode元数据和HDFS数据,是预防数据丢失的核心措施。