在 CentOS 上备份 HDFS,常见做法取决于你是备份数据本身、元数据,还是整体集群容灾。下面按最常用场景给你系统说明。
distcp(官方推荐)适合 集群间备份 / 跨机房容灾
hadoop distcp hdfs://namenode1:8020/ hdfs://namenode2:8020/backup/
✅ 优点
✅ 常用参数
hadoop distcp \
-update \
-skipcrccheck \
hdfs://source/ hdfs://target/
适合 小规模数据
hadoop fs -copyToLocal /user/hdfs/data /backup/hdfs_data
或
hadoop fs -get /user/hdfs/data /backup/hdfs_data
⚠️ 注意
如 S3 / OSS / MinIO
hadoop distcp hdfs:///data s3a://bucket/backup/
需要配置 core-site.xml:
<property>
<name>fs.s3a.access.key</name>
<value>xxx</value>
</property>
<property>
<name>fs.s3a.secret.key</name>
<value>xxx</value>
</property>
元数据目录一般在:
/dfs/nn
备份:
tar czvf namenode-meta-$(date +%F).tar.gz /dfs/nn
✅ 建议定期备份:
fsimageeditsVERSIONhdfs dfsadminhdfs dfsadmin -safemode enter
hdfs dfsadmin -saveNamespace
hdfs dfsadmin -safemode leave
hdfs dfsadmin -allowSnapshot /data
hdfs dfs -createSnapshot /data backup_2026_01_21
hdfs dfs -ls /data/.snapshot
✅ 特点
crontab -e
示例(每天 2 点):
0 2 * * * /opt/backup/hdfs_backup.sh
hdfs_backup.sh
#!/bin/bash
BACKUP_DIR=/backup/hdfs
hadoop fs -copyToLocal /user/hdfs/data $BACKUP_DIR/$(date +%F)
| 场景 | 推荐方案 |
|---|---|
| 数据容灾 | distcp 到另一个 HDFS |
| 误删恢复 | HDFS Snapshot |
| 元数据保护 | 定期备份 NameNode |
| 冷数据归档 | HDFS → S3 / OSS |
| 全集群恢复 | 元 + 数据双备份 |
❌ 直接在 NameNode 用 cp
✅ 用 distcp 或 dfsadmin
❌ 不备份 fsimage ✅ 元数据比数据更重要
如果你愿意,我可以:
你现在用的是 单 NameNode 还是 HA?