Ubuntu上Hadoop数据备份与恢复实操指南
一 备份恢复总览与前置检查
- 明确范围:备份对象包括HDFS数据、NameNode元数据、Hive Metastore 等关系型数据库、以及Hadoop配置与服务配置。HDFS默认通过多副本(常见为3)提供容错,但这不等同于跨集群或跨地域的备份,生产仍建议做快照、DistCp跨集群复制、定期离线拷贝等多层策略。操作前准备:确认HDFS可用空间、备份存储路径可写、备份窗口与带宽、以及必要的sudo/hdfs权限。关键检查命令:
- 查看HDFS健康与缺失副本:hdfs fsck / -files -blocks -locations
- 查看目录是否已启用快照:hdfs dfsadmin -listSnapshots
以上有助于在备份前后评估数据一致性与恢复目标可达性。
二 HDFS数据备份与恢复
-
快照 Snapshot(目录级时间点副本,适合快速回滚)
- 启用与创建:
- 允许快照:hdfs dfsadmin -allowSnapshot /path/to/dir
- 创建快照:hdfs dfs -createSnapshot /path/to/dir snap_20251117
- 查看与回滚:
- 查看快照:hdfs dfsadmin -listSnapshots /path/to/dir
- 目录级回滚(谨慎,会覆盖当前内容):先备份当前内容,再删除并拷贝快照回原路径:
- hdfs dfs -cp -r /path/to/dir /path/to/dir_bak_$(date +%F)
- hdfs dfs -rm -r /path/to/dir
- hdfs dfs -cp -r /path/to/dir/.snapshot/snap_20251117 /path/to/dir
- 文件级恢复:直接从快照拷贝所需文件/子目录。
- 适用:误删、误改、小范围回滚;注意快照仅对启用快照的目录有效。
-
DistCp 跨集群/跨路径复制(适合定期全量/增量与异地备份)
- 基本用法:
- 备份到备份集群/路径:hadoop distcp hdfs://src-nn:8020/path hdfs://backup-nn:8020/backup/path_$(date +%F)
- 增量/同步:使用**-update/-diff**等选项按需同步变更。
- 适用:跨机房/跨地域灾备、集群迁移、定期全量+增量策略落地。
-
本地/对象存储离线拷贝(适合长期归档与低成本留存)
- 从HDFS拉取到本地归档:hdfs dfs -get /path/to/hdfs/dir /local/backup/path_$(date +%F)
- 从本地回灌到HDFS:hdfs dfs -put -f /local/backup/path_2025-11-17 /path/to/hdfs/dir
- 结合对象存储(如与HDFS兼容的接口或Hadoop S3A)可将归档存至S3/MinIO等,便于长期保留与多地域分发。
三 NameNode元数据与Hive Metastore备份恢复
四 配置与服务备份及自动化
- 配置文件备份(便于快速重建集群或回滚版本)
- 打包关键配置:tar -czvf hdfs-config-$(date +%F).tar.gz /etc/hadoop/conf /etc/hive/conf
- 自动化与监控
- 使用cron定时执行DistCp/快照/数据库导出;保留多版本与异地副本。
- 定期校验:抽样hdfs dfs -ls/cp验证可用性,使用hdfs fsck检查块健康;对关键库表做恢复演练。
五 常见场景与命令清单
- 误删目录的快速回滚(启用快照的目录)
- 备份当前:hdfs dfs -cp -r /data /data_bak_$(date +%F)
- 回滚:hdfs dfs -rm -r /data && hdfs dfs -cp -r /data/.snapshot/snap_20251117 /data
- 跨集群灾备(每日全量)
- hadoop distcp -m 50 hdfs://nn1:8020/warehouse hdfs://nn2:8020/backup/warehouse_$(date +%F)
- 长期归档到本地
- hdfs dfs -get /warehouse /backup/warehouse_$(date +%F) && tar -czvf warehouse_$(date +%F).tar.gz -C /backup/warehouse_$(date +%F) .
- 元数据与数据库
- NN备份:saveNamespace后拷贝**/dfs/nn/current**;恢复时拷回并修正属主。
- Metastore:mysqldump导出/导入对应库。