温馨提示×

HBase数据恢复在Ubuntu上怎么实现

小樊
37
2025-12-12 19:05:24
栏目: 智能运维

在 Ubuntu 上恢复 HBase 数据的实用步骤

一、先判断场景与准备

  • 明确故障类型:是误删表/误删数据HMaster/RegionServer 异常、还是HFile/元数据损坏
  • 立刻保护现场:暂停写入、避免Compaction/Flush继续清理数据;对现有 HBase 目录做一次完整备份(如:cp -r /hbase/data /hbase/data_backup_$(date +%F_%T))。
  • 检查 HDFS 回收站:HDFS 回收站默认路径为**/user/$USER/.Trash/,参数fs.trash.interval**为保留时间(分钟,0 表示关闭)。注意:HBase 的 disable+drop 表数据不会进入 HDFS 回收站,而是受 HBase 自身的清理策略控制。
  • 了解关键目录与清理策略:HBase 数据在 HDFS 的**/hbase/data/default/<表名>;归档数据在.archive**,旧 WAL 在**.oldlog**。默认情况下,HFile 的清理 TTL 约为5 分钟(由hbase.master.hfilecleaner.ttl控制),HLog 在**.oldlog中默认最多保留600000 ms**(由hbase.master.logcleaner.ttl控制)。这些意味着“disable+drop”后应尽快抢救数据,否则可能被后台清理线程删除。

二、常见恢复路径

  • 场景A 快照恢复(推荐,安全且可回滚)
    1. 源端准备:在 HBase Shell 执行 flush '<表名>' 与(可选)major_compact '<表名>',确保数据落盘一致;如未启用快照,先对表目录允许快照:hdfs dfsadmin -allowSnapshot /hbase/data/default/<表名>
    2. 创建快照:hbase snapshot 'snap_<表名>', '<表名>'
    3. 导出快照到 HDFS(或外部存储):hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot snap_<表名> -copy-to hdfs://<namenode>:<port>/backup/snap_<表名>
    4. 目标集群(Ubuntu)恢复:先创建同结构空表(列族一致),再导入快照:hbase org.apache.hadoop.hbase.snapshot.ImportSnapshot -snapshot snap_<表名> -copy-from hdfs://<namenode>:<port>/backup/snap_<表名> -target <表名>
    5. 校验:hbase hbck <表名>,应返回 Status: OK
  • 场景B 误删表后基于 HDFS 抢救归档数据
    1. 快速定位归档数据:在 HDFS 查找被删表在**.archive下的 region 数据(路径类似:/hbase/.archive/default/<表名>//<列族>/**)。
    2. 新建同名同列族表:create '<表名>', '<列族1>', '<列族2>'
    3. 将抢救出的 HFile 拷回目标表对应目录(保持 region/列族层级一致)。
    4. 修复元数据与上线 Region:依次执行 hbase hbck -fixMeta <表名>hbase hbck -fixAssignments <表名>;若仍有 region 重叠或不一致,可酌情执行 hbase hbck -fixHdfsOverlaps <表名> 后再修复与分配。
    5. 校验:hbase hbck <表名>OK,并用 count '<表名>'scan '<表名>', {LIMIT => 100} 抽样验证。
  • 场景C 仅元数据/Region 异常(无数据文件丢失)
    1. 检查:hbase hbck <表名> 查看不一致项。
    2. 修复:依次执行 hbase hbck -fixMeta <表名>hbase hbck -fixAssignments <表名>;必要时再执行 hbase hbck -fixHdfsOverlaps <表名> 处理重叠。
    3. 校验:hbase hbck <表名> 返回 OK
  • 场景D 节点/进程故障导致不可用
    1. 确认 Zookeeper 正常。
    2. 重启异常进程:stop-hbase.shstart-hbase.sh,或单独重启 HMaster/RegionServer
    3. 查看日志定位:tail -f /hbase/logs/hbase-*.log,修复配置或数据目录权限后再启。

三、关键命令速查

  • 快照导出/导入
    • 导出:hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot <快照名> -copy-to <HDFS目标路径>
    • 导入:hbase org.apache.hadoop.hbase.snapshot.ImportSnapshot -snapshot <快照名> -copy-from <HDFS源路径> -target <表名>
  • 一致性修复与上线
    • 修复元数据:hbase hbck -fixMeta <表名>
    • 修复分配:hbase hbck -fixAssignments <表名>
    • 处理重叠:hbase hbck -fixHdfsOverlaps <表名>
    • 一键修复(慎用):hbase hbck -repair <表名>
  • HDFS 抢救与校验
    • 查看归档:hdfs dfs -ls /hbase/.archive/default/<表名>
    • 拷回 HFile:hdfs dfs -mv /hbase/.archive/default/<表名>/<region>/<cf>/<hfile> /hbase/data/default/<表名>/<region>/<cf>/
    • 权限修复:hdfs dfs -chown -R hbase:hbase /hbase/data/default/<表名>
    • 表状态校验:hbase hbck <表名>(期望 Status: OK
    • 数据抽样:count '<表名>'scan '<表名>', {LIMIT => 100}
  • 回收站与清理参数提示
    • HDFS 回收站:/user/$USER/.Trash/,参数 fs.trash.interval(分钟,0 关闭)。
    • HBase 清理:hbase.master.hfilecleaner.ttl(默认约5 分钟)、hbase.master.logcleaner.ttl(默认600000 ms)。

四、注意事项与最佳实践

  • 操作前务必对现有目录与 HDFS 目标路径做一次完整备份;变更 HDFS 权限时使用 hbase 系统用户或确保 HBase 进程可读写。
  • 对“会变化的数据”,恢复前务必执行 flush/major_compact 并使用快照迁移,避免恢复过程中数据漂移。
  • 版本差异:HBase 2.x 及以后版本不再支持通过 HBase 修复命令重建表,跨版本目录迁移恢复可能失败,优先采用快照方式。
  • 时间窗口:HBase 的 .archive/.oldlog 清理很快(默认约5 分钟),误删后应尽快抢救;HDFS 回收站对 HBase 的 disable+drop 无效
  • 恢复后务必用 hbase hbck 与业务侧抽样校验(如 count/scan)确认Region 上线数据一致性

0