在 Linux 环境下对 HDFS(Hadoop Distributed File System) 进行备份,常见方式分为官方工具备份、快照备份、跨集群备份、元数据和数据分别备份几种。下面按实用场景给你系统讲一下。
如果只是简单备份到 HDFS 其他目录:
hdfs dfs -cp /user/data /user/data_backup
或导出到本地:
hdfs dfs -get /user/data /local/backup/
恢复:
hdfs dfs -put /local/backup/data /user/data
✅ 适合:小数据、临时备份
distcp(分布式拷贝,最重要)hadoop distcp hdfs://namenode1:8020/source \
hdfs://namenode2:8020/backup
常用参数:
hadoop distcp -update -delete \
hdfs://clusterA/path \
hdfs://clusterB/path
-update:只同步变化文件-delete:删除目标端多余文件(镜像同步)✅ 适合:
⚠️ 注意:
hdfs dfsadmin -allowSnapshot /user/data
创建快照:
hdfs dfs -createSnapshot /user/data backup_20260121
查看快照:
hdfs dfs -ls /user/data/.snapshot
删除快照:
hdfs dfs -deleteSnapshot /user/data backup_20260121
✅ 优点:
✅ 适合:
NameNode 元数据目录(示例):
$HADOOP_HOME/data/dfs/name
手动备份:
hdfs dfsadmin -fetchImage /backup/fsimage_backup
或定时拷贝:
cp -r $HADOOP_HOME/data/dfs/name /backup/nn_meta
✅ 必须备份:
⚠️ 只有数据备份 ≠ 安全,元数据丢了集群无法恢复
0 2 * * * hadoop distcp hdfs://clusterA/data hdfs://clusterB/backup >> /var/log/hdfs_backup.log
或快照:
0 1 * * * hdfs dfs -createSnapshot /user/data snap_$(date +%F)
hdfs → S3 / OSS / COS| 场景 | 推荐方式 |
|---|---|
| 防误删 | HDFS 快照 |
| 异地容灾 | distcp 跨集群 |
| 定期全量 | distcp + crontab |
| 元数据保护 | fsimage 备份 |
| 大数据量 | distcp + EC |
如果你能告诉我:
我可以给你一套可直接用的备份脚本方案。