在 CentOS 上备份 HDFS 数据,常见做法有几种,下面按实用程度给你梳理一下,从简单到专业。
distcp 备份到另一个 HDFS(推荐)适合: 集群间备份、容灾
hadoop distcp hdfs://namenode1:8020/user hdfs://namenode2:8020/backup/user
说明:
namenode1:源集群namenode2:备份集群-update -delete)增量备份示例:
hadoop distcp -update -delete \
hdfs://namenode1:8020/user \
hdfs://namenode2:8020/backup/user
✅ 优点:官方方案、稳定、可跨集群
❌ 缺点:需要至少两个 HDFS
适合: 小数据量、临时备份
hdfs dfs -get /user /data/backup/user
或打包:
hdfs dfs -get /user /tmp/user && tar czf user.tar.gz -C /tmp user
恢复:
hdfs dfs -put /data/backup/user /user
✅ 简单
❌ 大数据量慢、占用本地空间
适合: 短时间内一致性备份
hdfs dfsadmin -allowSnapshot /user
hdfs dfs -createSnapshot /user backup_20260121
hdfs lsSnapshots /user
hdfs dfs -cp /user/.snapshot/backup_20260121 /user_restore
✅ 不占额外空间(仅差量)
❌ 不是真正“异地备份”
HDFS 数据 ≠ 元数据
dfs.namenode.name.dircp -r /data/hadoop/dfs/name /backup/name_$(date +%F)
hdfs dfsadmin -fetchImage /backup
✅ 防止 NameNode 挂了全丢
# /root/backup_hdfs.sh
#!/bin/bash
DATE=$(date +%F)
hadoop distcp -update -delete \
hdfs://localhost:8020/user \
hdfs://backup:8020/backup/user_$DATE
加执行权限:
chmod +x /root/backup_hdfs.sh
定时任务:
crontab -e
0 2 * * * /root/backup_hdfs.sh
✅ 小公司 / 测试环境
快照 + 本地 get
✅ 生产环境
distcp 到备集群 + NameNode 元数据备份
如果你愿意,可以告诉我:
我可以直接帮你写一套可用备份方案 + 脚本。