-
场景A 误删数据但表仍在(优先尝试回收站/墓碑标记)
- 在 HBase Shell 为涉及的列族开启保留已删除单元:
alter ‘your_table’, { NAME => ‘cf’, KEEP_DELETED_CELLS => TRUE }
- 使用 raw 扫描与时间范围查看被删除但尚未被 major compaction 清理的数据:
scan ‘your_table’, { RAW => true, TIMERANGE => [0, <delete_time_ms>] }
- 将需要的数据读出并重新写入(批量导出/再导入或应用重放)。
- 验证无误后,可按需关闭保留:
alter ‘your_table’, { NAME => ‘cf’, KEEP_DELETED_CELLS => FALSE }
说明:HBase 删除是写入 删除标记,在 major compaction 后才会物理清理;开启 KEEP_DELETED_CELLS 可暂时阻止清理,但受 TTL 约束仍可能过期。
-
场景B 使用快照恢复整表(最稳妥、对线上影响小)
- 列出快照:list_snapshots
- 若表结构仍在,直接恢复:restore_snapshot ‘snap_name’
- 若表被误删,先按原结构重建表(列族一致),再恢复:
create ‘your_table’, ‘cf1’, ‘cf2’
restore_snapshot ‘snap_name’
- 校验数据:scan/计数/抽样比对。
-
场景C 使用 Export/Import 备份恢复(跨集群/跨环境迁移常用)
- 导出:hbase org.apache.hadoop.hbase.mapreduce.Export your_table /backup/your_table
- 目标集群/实例上先建表(列族一致):create ‘your_table’, ‘cf1’, ‘cf2’
- 导入:hbase org.apache.hadoop.hbase.mapreduce.Import your_table /backup/your_table
- 校验数据一致性与 Region 分布。
-
场景D 使用 Backup/Restore 工具(若集群启用 HBase 备份功能)
- 查看备份:hbase backup list
- 恢复:hbase restore <backup_id> [tables=your_table]
- 校验。
-
场景E 仅 Region/文件异常或 HMaster/RegionServer 故障
- 单点进程异常:确认 ZooKeeper 正常后,重启 HMaster/RegionServer;观察日志与 UI。
- 一致性/文件异常:使用 hbck 检测并尝试修复:
hbase hbck -repair
- 配置错误:核对 hbase-site.xml 关键项(如 hbase.rootdir、ZooKeeper 地址、HDFS 权限),修正后滚动重启。