Hadoop Linux版备份恢复指南
NameNode元数据(fsimage和edits文件)是HDFS的核心,备份需进入安全模式确保数据一致性:
sudo -u hdfs hdfs dfsadmin -safemode enter;sudo -u hdfs hdfs dfsadmin -saveNamespace;/dfs/nn/current)到备份路径:sudo -u hdfs cp -r /dfs/nn/* /nnbak/;sudo -u hdfs hdfs dfsadmin -safemode leave。快照是HDFS的只读时间点副本,不影响集群运行,适合频繁备份:
hdfs dfsadmin -allowSnapshot /path/to/directory(如/data);hdfs dfs -createSnapshot /path/to/directory snapshot_name(如snapshot_20251001);hdfs dfs -cp /path/to/directory/.snapshot/snapshot_name/path/to/file /path/to/restore(如恢复/data/user1/file.txt)。DistCp基于MapReduce,支持大规模数据复制和增量备份(通过-update参数):
hadoop distcp hdfs:///source/path hdfs:///backup/path;hadoop distcp -update hdfs:///source/path hdfs:///backup/path(仅复制变化的文件)。回收站是HDFS的内置临时存储,可恢复最近删除的文件:
core-site.xml中添加:<property>
<name>fs.trash.interval</name>
<value>120</value> <!-- 单位:分钟,0表示禁用 -->
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>60</value> <!-- 检查点间隔,单位:分钟 -->
</property>
hdfs dfs -mv /user/username/.Trash/Current/path/to/deleted_file /path/to/restore。sudo ambari-backup backup --target-dir=/backup/location;current目录和in_use.lock文件:sudo -u hdfs mv ./current/ ./bak/; sudo -u hdfs mv in_use.lock ./bak/;current目录:sudo -u hdfs cp -r /nnbak/* /dfs/nn/;hdfs:sudo -u hdfs chown hdfs:hdfs -R /dfs/nn/current/;若数据丢失或损坏,直接从快照复制文件到目标路径即可,如上述快照恢复步骤。
若文件在回收站保留期内(由fs.trash.interval决定),可通过mv命令恢复,如上述回收站恢复步骤。
若fsimage损坏,需从最近的fsimage备份和edits日志中恢复:
fsimage文件(如fsimage_0000000000000000010);fsimage复制到NameNode的current目录;fsimage并应用后续edits日志。使用Ambari或Cloudera Manager的恢复功能,选择备份时间点,一键恢复集群元数据和数据。
/var/log/hadoop-hdfs/目录下的日志监控备份进度和错误。