Debian 上 HBase 备份与恢复实用指南
一 常用备份与恢复方式概览
- Snapshot 快照:在 HDFS 层对表的 HFile 列表做轻量级“指针”快照,几乎不占额外空间、对业务影响小,适合快速回滚与克隆测试环境。
- Export/Import:通过 MapReduce 将表导出为 SequenceFile 到 HDFS 或本地,再导入到目标表;适合小规模或跨环境迁移。
- Replication 集群复制:基于 WAL 的异步复制,构建“热”副本,用于高可用与近实时灾备。
- Backup/Restore 备份框架:HBase 提供的企业级备份/恢复能力,支持 全量/增量 备份与时间点恢复(需版本支持并启用相关组件)。
- DistCp/HDFS 层面拷贝:直接拷贝 /hbase 目录用于离线迁移或冷备,但需停写以保证一致性,风险较高。
二 方法一 Snapshot 快照 快速回滚与克隆
- 前置配置:在 hbase-site.xml 启用快照
hbase.snapshot.enabledtrue
- 备份(在 hbase shell)
- 创建快照:snapshot ‘your_table’, ‘snap_20260101’
- 查看快照:list_snapshots
- 克隆为新表(零拷贝):clone_snapshot ‘snap_20260101’, ‘your_table_bak’
- 恢复(在 hbase shell)
- 建议先禁用表:disable ‘your_table’
- 按快照恢复:restore_snapshot ‘snap_20260101’
- 启用表:enable ‘your_table’
- 注意
- 若表开启了 Replication,对主表执行 restore_snapshot 前应先停止复制并重新 bootstrap,避免 WAL 与快照不一致。
- 快照是 HDFS 硬链接机制,速度快、占用小,适合频繁备份与快速回滚。
三 方法二 Export/Import 小规模迁移与导出
- 导出到 HDFS(MapReduce 作业)
- 全量导出:hbase org.apache.hadoop.hbase.mapreduce.Export ‘your_table’ /backup/export/your_table
- 按时间范围导出(时间戳单位为毫秒):
- today=$(date +%s000)
- yesterday=$(date -d ‘1 day ago’ +%s000)
- hbase org.apache.hadoop.hbase.mapreduce.Export ‘your_table’ /backup/export/your_table $yesterday $today
- 导入恢复
- 目标表需先存在且结构一致:create ‘your_table’, ‘cf1’, ‘cf2’
- 导入:hbase org.apache.hadoop.hbase.mapreduce.Import ‘your_table’ /backup/export/your_table
- 适用场景
- 跨集群迁移、小表/中等规模数据备份、按时间窗口导出。
四 方法三 Replication 与 Backup/Restore 热备与时间点恢复
- Replication 热备(异步)
- 开启复制:在 hbase-site.xml 设置 hbase.replication 为 true;两集群互通且版本一致。
- 建立复制通道:add_peer ‘1’, ‘zk1:2181,zk2:2181,zk3:2181:/hbase’(若共用 ZK,需设置不同的 zookeeper.znode.parent)。
- 目标表结构与列族一致,并为需要复制的列族开启复制:
- disable ‘your_table’
- alter ‘your_table’, {NAME => ‘cf1’, REPLICATION_SCOPE => ‘1’}
- enable ‘your_table’
- 重要说明:复制只同步开启后写入的数据;历史数据可用 Snapshot + Export/Import 先灌入,再开启复制;客户端若关闭 WAL 将不会被复制。
- Backup/Restore 时间点恢复(需版本支持)
- 启用备份框架(hbase-site.xml):
- hbase.backup.enable=true
- hbase.master.logcleaner.plugins=org.apache.hadoop.hbase.backup.master.BackupLogCleaner,…
- hbase.procedure.master.classes=org.apache.hadoop.hbase.backup.master.LogRollMasterProcedureManager,…
- hbase.procedure.regionserver.classes=org.apache.hadoop.hbase.backup.regionserver.LogRollRegionServerProcedureManager,…
- hbase.coprocessor.region.classes=org.apache.hadoop.hbase.backup.BackupObserver,…
- hbase.master.hfilecleaner.plugins=org.apache.hadoop.hbase.backup.BackupHFileCleaner,…
- 备份与恢复:
- 全量备份:hbase backup create full hdfs://backup-nn:8020/backup/20260101 -t your_table
- 增量备份(需先有全量):hbase backup create incremental hdfs://backup-nn:8020/backup/20260101 -t your_table
- 恢复:hbase restore hdfs://backup-nn:8020/backup/20260101 -t your_table
- 适用场景
- Replication 用于“热”副本与近实时容灾;Backup/Restore 用于“冷”副本与 时间点恢复。
五 方法四 DistCp 与 HDFS 拷贝 离线迁移与冷备
- 在线集群不建议直接 DistCp /hbase 目录,因运行中可能产生不一致;如需使用,建议先停写或进入维护窗口。
- 离线冷备步骤
- 停写并确认无写入:stop-hbase.sh
- 使用 DistCp 拷贝:hadoop distcp -m 50 hdfs://src-nn:8020/hbase hdfs://backup-nn:8020/hbase_bak_20260101
- 恢复时先备份现有数据,再拷贝回:hadoop distcp -m 50 hdfs://backup-nn:8020/hbase_bak_20260101 hdfs://src-nn:8020/hbase
- 启动 HBase:start-hbase.sh
- 适用场景
- 跨机房/跨集群离线迁移、长期归档冷备;操作务必在停机或一致性保证前提下进行。
六 实践建议与注意事项
- 备份策略
- 日常用 Snapshot 做频繁回滚点;关键业务叠加 Replication 做热备;定期做 Export/Import 或 Backup/Restore 全量,并在其间穿插增量。
- 一致性要点
- Replication 只复制开启后数据,历史数据需先导入;客户端关闭 WAL 将不被复制。
- 对启用复制的表执行 restore_snapshot 前,先停复制并重新 bootstrap。
- 版本与兼容性
- 跨集群复制/迁移建议 HBase 版本一致;Backup/Restore 需确认集群已启用相应组件与配置。
- 校验与演练
- 定期做恢复演练与校验(如抽样 scan/count、校验和/行数对比),确保备份可用。
- 运行影响
- 尽量在业务低峰期执行备份;MapReduce 作业与 DistCp 会占用集群资源,注意队列与并发控制。