Debian 上 HBase 数据备份与恢复实操
一、备份方案总览与选型
二、快照备份与恢复(推荐)
<property>
<name>hbase.snapshot.enabled</name>
<value>true</value>
</property>
# 1) 创建快照(可选 SKIP_FLUSH 避免 flush)
snapshot 'mytbl', 'snap_20251215', {SKIP_FLUSH => true}
# 2) 列出/校验
list_snapshots
# 或按前缀过滤
list_snapshots 'snap_.*'
# 3) 同集群克隆一份(不覆盖原表,用于验证/演练)
clone_snapshot 'snap_20251215', 'mytbl_bak'
# 4) 恢复到原表(会先 disable)
disable 'mytbl'
restore_snapshot 'snap_20251215'
enable 'mytbl'
# 5) 删除快照
delete_snapshot 'snap_20251215'
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot snap_20251215 \
-copy-from hdfs://src-nn:8020/hbase \
-copy-to hdfs://dst-nn:8020/hbase \
-mappers 10 -bandwidth 100
在目标集群 list_snapshots 可见后,可直接 clone_snapshot 或 restore_snapshot。三、Export/Import 与 CopyTable(适合小规模与增量)
# 全量导出到 HDFS
hbase org.apache.hadoop.hbase.mapreduce.Export mytbl /backup/hbase/mytbl_full
# 增量导出:仅导出 [starttime, endtime) 区间
hbase org.apache.hadoop.hbase.mapreduce.Export mytbl \
/backup/hbase/mytbl_incr 1 1734230400000 1734316800000
# 目标集群导入(先建表:create 'mytbl', {NAME=>'f1', VERSIONS=>3})
hbase org.apache.hadoop.hbase.mapreduce.Import mytbl /backup/hbase/mytbl_full
提示:Export 默认只导出每个 Cell 的最新版本,如需多版本,在 Export 命令中增加版本数参数(如:3)。# 同集群:复制到新表(需先建表)
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.table=mytbl_copy mytbl
# 跨集群:指定对端 ZK 与父路径
hbase org.apache.hadoop.hbase.mapreduce.CopyTable \
--peer.adr=zk1:2181,zk2:2181,zk3:2181:/hbase \
mytbl
# 按时间/列族/行范围
hbase org.apache.hadoop.hbase.mapreduce.CopyTable \
--starttime=1734230400000 --endtime=1734316800000 \
--families=f1,f2 \
--peer.adr=zk1:2181,zk2:2181,zk3:2181:/hbase \
mytbl
适用小表或指定窗口;大表/高并发会对线上造成读放大与写放大。四、DistCp 直拷 HFiles 与 BulkLoad(大表离线备份/迁移)
hadoop distcp -m 20 hdfs://src-nn:8020/hbase/data/default/mytbl \
hdfs://backup-nn:8020/hbase/backup/mytbl_hfiles
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \
hdfs://backup-nn:8020/hbase/backup/mytbl_hfiles mytbl
五、备份策略与运维要点