HBase数据恢复Debian方法
小樊
39
2025-12-09 05:47:10
Debian环境下HBase数据恢复方法
一、先判断场景与优先级
- 误删数据但表仍在:优先尝试用KEEP_DELETED_CELLS与raw scan找回未物理清理的数据,再导出补写回表。
- 表被禁用/删除但HDFS数据或快照在:用快照恢复或ExportSnapshot/Import重建表并导入数据。
- 元数据损坏/Region不一致:用hbck在线修复,或用OfflineMetaRepair离线重建元数据。
- 仅WAL残留:用WALPlayer将WAL回放到目标表或导出为HFile再批量导入。
- 有备份体系:使用HBase Backup/Restore执行全量/增量恢复。以上方法在Debian与CentOS等Linux上命令一致,差异主要在包管理与路径习惯。
二、场景化恢复步骤
-
场景A 误删数据但表未删
- 在hbase shell为涉及的列族开启保留删除标记:
alter ‘t’, { NAME => ‘f’, KEEP_DELETED_CELLS => TRUE }
若有多个列族,分别设置。注意:若设置了TTL,过期数据仍会被清理。
- 用raw模式与时间窗口扫描已删除但尚未被major compaction清理的数据:
scan ‘t’, { TIMERANGE => [0, 当前时间], RAW => true }
- 将扫描结果导出(如to_json/to_csv),再以批量Put/MapReduce作业写回目标表。
- 校验行数与关键业务指标,确认恢复完整后,可按需关闭KEEP_DELETED_CELLS(避免存储膨胀)。
-
场景B 表被禁用或删除,但有HDFS数据或快照
- 快照恢复(推荐,轻量且快):
- 列出快照:list_snapshots
- 克隆为新表:clone_snapshot ‘snap1’, ‘t_recovered’
- 校验后可将数据迁回原表或直接使用新表。
- 无快照但有HDFS数据文件:
- 在HDFS确认表目录是否存在:hadoop fs -ls /hbase/data/default/
- 用ExportSnapshot将快照或表目录拷贝到备份路径(跨集群/跨环境迁移也适用):
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot YourSnapshotName -copy-to hdfs://nn:8020/backup/your_snap
- 在目标集群用快照恢复或先建表结构再导入:
create ‘t_recovered’, {NAME => ‘cf1’}, {NAME => ‘cf2’}
hbase org.apache.hadoop.hbase.mapreduce.Import t_recovered /backup/your_snap
- 若之前做过备份计划,可直接用hbase backup create/restore执行全量/增量恢复。
-
场景C 元数据损坏或Region不一致
- 在线检查与修复:
hbase hbck t1
hbase hbck -fixMeta -fixAssignments t1
谨慎使用-fix相关参数,修复前建议备份ZooKeeper与HDFS相关目录。
- 集群无法启动时离线重建元数据:
hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair
- 修复完成后重启集群并复核region上线与健康状态。
-
场景D 只有WAL可用
- 使用WALPlayer将WAL回放到指定表(可限定时间区间):
hbase org.apache.hadoop.hbase.mapreduce.WALPlayer /hbase/WALs/…/hostname%2C16020%2C… t1
- 或导出为HFile后通过Bulk Load导入:
hbase org.apache.hadoop.hbase.mapreduce.WALPlayer -outputFormat=HFile … t1 /tmp/hfiles
生成HFile后执行Bulk Load(示例)
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /tmp/hfiles t1
- 校验数据一致性与数量。
三、Debian环境的注意事项与常用命令
- 环境与权限
- 确认HADOOP_CONF_DIR与HBASE_CONF_DIR指向正确配置;HBase/Hadoop命令可用which/whereis定位。
- 执行HDFS/HBase操作前,确保当前用户具备相应权限(如使用hdfs dfs -chmod/chown或在具备权限的Kerberos主体下kinit)。
- 常用命令清单(Debian与CentOS命令一致)
- 服务启停:start-hbase.sh / stop-hbase.sh
- 表与快照:list, create, disable, drop, snapshot ‘s1’,‘t1’, clone_snapshot ‘s1’,‘t_new’, list_snapshots
- 备份恢复:
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot s1 -copy-to hdfs://nn:8020/backup/s1
hbase org.apache.hadoop.hbase.mapreduce.Import t_new /backup/s1
- 一致性修复:hbase hbck t1;离线修复:hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair
- WAL回放:hbase org.apache.hadoop.hbase.mapreduce.WALPlayer
- 校验:hbase shell中status ‘simple’、scan/count、RowCounter/CellCounter。
四、恢复后验证与风险控制
- 数据校验
- 行数与关键指标对比(如重要业务主键数量、分区计数)。
- 抽样对比重要行的多版本与TTL行为;确认无重复导入。
- 使用RowCounter/CellCounter做全表或条件统计,验证量级一致性。
- 风险控制
- 任何修复/导入前先备份HDFS上的/hbase目录与ZooKeeper znode(如/hbase、/hbase/table等)。
- 避免并发大规模导入与major compaction叠加;必要时在低峰期执行。
- 对含TTL的表,恢复窗口受TTL约束;对开启KEEP_DELETED_CELLS的表,恢复完成后评估是否关闭以控制存储。