温馨提示×

HBase数据恢复Ubuntu上如何实现

小樊
34
2025-12-16 17:43:34
栏目: 智能运维

Ubuntu上HBase数据恢复实操指南

一 恢复前的关键判断

  • 明确丢失类型:是误删表、误删数据、HFile损坏、还是Region不一致。不同场景的恢复路径不同。
  • 检查HDFS回收站:HDFS层面删除的文件可能位于**/user/$USER/.Trash/,但HBase的disable+drop**通常不会进入回收站,需直接检查HBase归档目录。
  • 把握时间窗口:HBase有后台清理机制,涉及两个关键参数:
    • hbase.master.logcleaner.ttl(默认600000 ms)控制.oldlog保留时间;
    • hbase.master.hfilecleaner.plugins中的TimeToLiveHFileCleaner默认HFile失效约5分钟
      因此,发现误删后应尽快暂停清理并抢救数据,避免被**.archive.oldlog**自动清除。

二 场景化恢复步骤

  • 场景A 快照恢复(推荐,最安全)

    1. 列出可用快照:
      hbase shell> list_snapshots
    2. 导出到HDFS备份目录:
      hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot YourSnapshotName -copy-to hdfs://namenode:8020/backup/snap
    3. 在目标集群/库中恢复:
      hbase org.apache.hadoop.hbase.snapshot.ImportSnapshot -snapshot YourSnapshotName -copy-from hdfs://namenode:8020/backup/snap -target hbase_namespace:target_table
      说明:快照方式对线上影响小,适合跨集群/跨环境恢复。
  • 场景B 误删表后基于HDFS归档抢救

    1. 立即停止HBase相关进程,避免HFileCleaner/LogCleaner继续清理:
      sudo systemctl stop hbase-master hbase-regionserver
      并在HBase配置中临时将hbase.master.hfilecleaner.ttl调大(例如设为86400000 ms),防止归档被删。
    2. 在HDFS查找被归档的数据:
      hdfs dfs -ls -R /hbase/.archive | grep <表名>
      若表刚被删除,通常可在**.archive**下找到按region/列族存放的HFile。
    3. 在HBase中重建同名同结构表(列族一致):
      hbase shell> create ‘your_table’, {NAME => ‘cf1’}, {NAME => ‘cf2’}
    4. 将抢救出的HFile移动/拷贝到目标表对应目录(保持region/列族层级一致):
      hdfs dfs -mv /hbase/.archive/default/your_table/region-xxxx/cf1/*.hfile /hbase/data/default/your_table/region-xxxx/cf1/
    5. 修复元数据并上线:
      hbase hbck -repair
      hbase shell> enable ‘your_table’
    6. 校验数据:
      hbase shell> count ‘your_table’
      如缺失region元数据,可结合hbck fixHdfsOrphans/fixTableOrphans/fixMeta逐步修复,再执行一次**-repair**。
      说明:该方法依赖归档未被清理;若归档已过期,只能尝试从更早期的备份恢复。
  • 场景C 表结构损坏或Region不一致

    1. 离线检查并修复:
      hbase hbck
      hbase hbck -fixMeta
      hbase hbck -fixAssignments
      hbase hbck -repair
    2. 若表被disable且无法修复,可重建同名同列族表后,按场景B将HFile拷回再修复元数据。
      说明:hbck可修复常见不一致,但修复顺序与集群状态需谨慎评估,生产环境建议先备份。

三 关键注意事项

  • 操作前先备份当前HBase根目录与ZooKeeper元数据(如**/hbase与ZK的/hbase** znode),以便回滚。
  • 全程尽量在HBase停机或维护窗口进行,避免写入冲突。
  • 恢复后务必执行count/scan校验数据量与关键样本,确认无重复或缺失。
  • 若HDFS层面曾删除文件,尽快检查**/user/$USER/.Trash**;但需注意HBase的disable+drop不走回收站。

四 建议的恢复流程清单

  1. 立刻暂停HBase服务并临时调大hbase.master.hfilecleaner.ttl,防止**.archive**被清理。
  2. 快速定位可用备份:优先快照;无快照则检查**.archive.oldlog**。
  3. 按场景执行恢复:快照恢复优先;归档抢救需重建表并拷回HFile,再用hbck -repair修复元数据。
  4. 上线前校验数据一致性与Region分布,确认无误后再恢复业务写入。

0