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 快照恢复(推荐,最安全)
- 列出可用快照:
hbase shell> list_snapshots
- 导出到HDFS备份目录:
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot YourSnapshotName -copy-to hdfs://namenode:8020/backup/snap
- 在目标集群/库中恢复:
hbase org.apache.hadoop.hbase.snapshot.ImportSnapshot -snapshot YourSnapshotName -copy-from hdfs://namenode:8020/backup/snap -target hbase_namespace:target_table
说明:快照方式对线上影响小,适合跨集群/跨环境恢复。
-
场景B 误删表后基于HDFS归档抢救
- 立即停止HBase相关进程,避免HFileCleaner/LogCleaner继续清理:
sudo systemctl stop hbase-master hbase-regionserver
并在HBase配置中临时将hbase.master.hfilecleaner.ttl调大(例如设为86400000 ms),防止归档被删。
- 在HDFS查找被归档的数据:
hdfs dfs -ls -R /hbase/.archive | grep <表名>
若表刚被删除,通常可在**.archive**下找到按region/列族存放的HFile。
- 在HBase中重建同名同结构表(列族一致):
hbase shell> create ‘your_table’, {NAME => ‘cf1’}, {NAME => ‘cf2’}
- 将抢救出的HFile移动/拷贝到目标表对应目录(保持region/列族层级一致):
hdfs dfs -mv /hbase/.archive/default/your_table/region-xxxx/cf1/*.hfile /hbase/data/default/your_table/region-xxxx/cf1/
- 修复元数据并上线:
hbase hbck -repair
hbase shell> enable ‘your_table’
- 校验数据:
hbase shell> count ‘your_table’
如缺失region元数据,可结合hbck fixHdfsOrphans/fixTableOrphans/fixMeta逐步修复,再执行一次**-repair**。
说明:该方法依赖归档未被清理;若归档已过期,只能尝试从更早期的备份恢复。
-
场景C 表结构损坏或Region不一致
- 离线检查并修复:
hbase hbck
hbase hbck -fixMeta
hbase hbck -fixAssignments
hbase hbck -repair
- 若表被disable且无法修复,可重建同名同列族表后,按场景B将HFile拷回再修复元数据。
说明:hbck可修复常见不一致,但修复顺序与集群状态需谨慎评估,生产环境建议先备份。
三 关键注意事项
- 操作前先备份当前HBase根目录与ZooKeeper元数据(如**/hbase与ZK的/hbase** znode),以便回滚。
- 全程尽量在HBase停机或维护窗口进行,避免写入冲突。
- 恢复后务必执行count/scan校验数据量与关键样本,确认无重复或缺失。
- 若HDFS层面曾删除文件,尽快检查**/user/$USER/.Trash**;但需注意HBase的disable+drop不走回收站。
四 建议的恢复流程清单
- 立刻暂停HBase服务并临时调大hbase.master.hfilecleaner.ttl,防止**.archive**被清理。
- 快速定位可用备份:优先快照;无快照则检查**.archive与.oldlog**。
- 按场景执行恢复:快照恢复优先;归档抢救需重建表并拷回HFile,再用hbck -repair修复元数据。
- 上线前校验数据一致性与Region分布,确认无误后再恢复业务写入。