HDFS备份需结合内置工具(快照、distcp)与外部策略(配置备份、第三方工具),以下是具体方法:
快照是文件系统的只读时间点副本,适合快速恢复目录或文件到特定时刻,对集群性能影响小。
hdfs dfsadmin -allowSnapshot /path/to/snapshotDir(如/data);hdfs dfs -createSnapshot /path/to/snapshotDir snapshotName(如snapshot_20251001);hdfs dfs -ls /path/to/snapshotDir/.snapshot;hdfs dfs -cp /path/to/snapshotDir/. /path/to/destinationDir(将快照内容复制到目标目录)。distcp是Hadoop内置的分布式复制工具,支持跨集群、全量/增量备份,适合大规模数据迁移。
hadoop distcp hdfs://source-namenode:8020/path/to/source hdfs://target-namenode:8020/path/to/backup;hadoop distcp -update hdfs://source-namenode:8020/path/to/source hdfs://target-namenode:8020/path/to/backup;hadoop distcp -delete hdfs://source-namenode:8020/path/to/source hdfs://target-namenode:8020/path/to/backup。HDFS配置文件(如core-site.xml、hdfs-site.xml、mapred-site.xml)是集群运行的核心,需定期备份。
cd /etc/hadoop/conf;tar -czvf /backup/hdfs/hdfs-config-$(date +%Y%m%d).tar.gz *(按日期命名备份文件);crontab -e添加定时任务(如每天凌晨2点备份):0 2 * * * tar -czvf /backup/hdfs/hdfs-config-$(date +\%Y\%m\%d).tar.gz /etc/hadoop/conf/*。借助MinIO(对象存储)等工具,将HDFS数据备份到低成本、高可用的外部存储,支持长期归档。
mc)并配置HDFS别名:mc alias set hdfs http://namenode:9000 access_key secret_key;mc mirror hdfs/data minio/backup/hdfs/data(同步/data目录到MinIO的backup/hdfs/data路径);mc mirror minio/backup/hdfs/data hdfs/restored_data(从MinIO恢复到HDFS的restored_data目录)。恢复需根据故障类型(误删除、节点故障、NameNode损坏)选择对应方法:
HDFS回收站(.Trash目录)默认保留删除文件120分钟(可配置),适合恢复近期误删除的文件。
core-site.xml中启用了回收站:<property>
<name>fs.trash.interval</name>
<value>120</value> <!-- 单位:分钟 -->
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>60</value> <!-- 检查点间隔:每60分钟创建一次检查点 -->
</property>
hdfs dfs -ls /user/username/.Trash/Current;hdfs dfs -mv /user/username/.Trash/Current/deleted_file /path/to/original/directory(将文件从回收站移回原目录)。若数据目录创建了快照,可通过快照快速恢复到某一时刻的状态(如数据被覆盖、误修改)。
cd /path/to/original/directory;hdfs dfs -cp /path/to/snapshotDir/. /path/to/original/directory(覆盖当前目录内容)。NameNode是HDFS的元数据管理中心,其故障会导致集群不可用,需根据是否有备份采取不同措施:
stop-dfs.sh;data目录(如/var/lib/hadoop-hdfs/namenode)复制到NameNode的数据目录;start-dfs.sh。stop-dfs.sh;fsimage和edits文件复制到NameNode的data目录(如/var/lib/hadoop-hdfs/namenode/current);start-dfs.sh。DataNode负责存储数据块,其故障会导致数据块副本数不足,HDFS会自动触发副本复制(默认副本数为3)。
hdfs dfsadmin -report(查看Live datanodes数量);dfs.replication)。hdfs dfsadmin -replicate /path/to/file(强制复制指定文件的所有副本)。hdfs fsck是HDFS的数据完整性检查工具,可用于检测并修复损坏的文件块。
hdfs fsck / -files -blocks -locations(查看所有文件的块分布和健康状态);hdfs fsck /path/to/corrupted_file -move(将损坏的块移动到/lost+found目录);hdfs fsck / -delete(清理无效的块引用)。