温馨提示×

Debian HBase数据备份怎么做

小樊
39
2025-12-15 04:29:52
栏目: 智能运维

Debian 上 HBase 数据备份与恢复实操

一、备份方案总览与选型

  • Snapshot 快照:对表做一次轻量“指针级”快照,几乎不影响在线业务;适合快速回滚同/跨集群迁移。跨集群用 ExportSnapshot 拷贝快照数据。
  • Export/Import:将表数据导出为 SequenceFileHDFS,可指定时间窗口做增量导出;适合小规模跨环境恢复
  • CopyTable:基于 Scan/Put 在表间/集群间复制数据;适合小表指定时间/行范围的复制。
  • DistCp + BulkLoad:直接拷贝底层 HFiles 到远端 HDFS,再用 LoadIncrementalHFiles 导入;适合大表离线迁移/备份,通常需停写以保证一致性。
  • Replication:基于 WAL 的异步复制,用于主备容灾而非离线备份;误删后同样会被复制,不能替代备份。
    以上方法在 Debian 环境下的命令与 Linux/HDFS 一致,关键在于 HBase 与 Hadoop 配置正确、权限到位。

二、快照备份与恢复(推荐)

  • 开启快照(仅首次需要,hbase-site.xml):
    <property>
      <name>hbase.snapshot.enabled</name>
      <value>true</value>
    </property>
    
  • 在 HBase Shell 执行:
    # 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'
    
  • 跨集群备份/迁移快照(MR 拷贝,带宽可控):
    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。
  • 注意:若集群启用 Replication,restore 后主从位点会不一致,需先停复制、回放/重引导再恢复同步。

三、Export/Import 与 CopyTable(适合小规模与增量)

  • Export/Import(可做增量,基于时间戳)
    # 全量导出到 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)。
  • CopyTable(同/跨集群复制,基于 Scan/Put)
    # 同集群:复制到新表(需先建表)
    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(大表离线备份/迁移)

  • 步骤
    1. 为减少不一致,建议对目标表停写(或选择离线时间窗)。
    2. 使用 DistCp 拷贝表目录(HFiles)到备份/远端 HDFS:
      hadoop distcp -m 20 hdfs://src-nn:8020/hbase/data/default/mytbl \
                        hdfs://backup-nn:8020/hbase/backup/mytbl_hfiles
      
    3. 在目标集群用 LoadIncrementalHFiles 导入:
      hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \
        hdfs://backup-nn:8020/hbase/backup/mytbl_hfiles mytbl
      
  • 说明:该方式速度快、对业务影响小(拷贝的是不可变 HFiles),但要求停写或确保无写入,避免拷贝期间产生新 HFiles 导致不一致。

五、备份策略与运维要点

  • 组合建议:以Snapshot 为主(快速回滚/克隆),配合定时 Export 增量到异地 HDFS(长期留存/审计),大表迁移用 DistCp+BulkLoad
  • 一致性:CopyTable/Export 会扫描表,可能对线上造成读/写放大;尽量在低峰或设置 starttime/endtime 窗口执行。
  • 版本与多版本:Export 默认仅导出最新版本,多版本需在导出时显式指定版本数。
  • 复制与恢复:启用 Replication 的主从环境,执行 restore 后需停复制并重新引导,避免主从不一致。
  • 校验与演练:定期做快照克隆导入验证,并校验 HFiles 数量/大小count/scan 结果,确保可恢复性。

0