更新时间:2024-08-30 GMT+08:00

MRS中恢复HBase表

CDH HBase表目录已经迁移到MRS HBase后,可以使用命令恢复。对于那些会变化的数据,需要使用快照保证数据不变,然后再迁移并恢复。

约束限制

本方案仅支持迁移数据到MRS 1.x版本集群,2.x及之后版本无法通过HBase修复命令重建HBase表。

迁移的目标集群为2.x及之后版本时,HBase修复命令已经不再支持,通过HBase数据目录迁移的方式无法使用。

使用命令恢复历史不变的数据

这里以恢复“/hbase/data/default/table_20180811”表为例,恢复步骤如下:
  1. 进入MRS Client所在的节点,例如master1节点。
  2. 切换为omm用户。

    su – omm

  3. 加载环境变量。

    source /opt/client/bigdata_env

  4. 执行修改目录权限命令。

    hdfs dfs –chown omm:hadoop –R /hbase/data/default/table_20180811

    • omm:hadoop:表示用户名,实际场景中请替换。
    • /hbase/data/default/table_20180811:表示表所在路径。
  5. 执行恢复元数据命令。

    hbase hbck –fixMeta table_20180811

  6. 执行Region上线命令。

    hbase hbck –fixAssignments table_20180811

  7. 出现“Status: OK”则说明恢复表成功。

使用快照迁移并恢复会变的数据

  1. 在源端CDH集群HBase shell中执行:

    flush <table name>

  2. 在源端CDH集群HBase shell执行:

    compact <table name>

  3. 如果表没有打开Snap功能,则执行:

    hadoop dfsadmin -allowSnapshot $path

  4. 创建HDFS Snapshot,例如命名s0:

    hdfs dfs -createSnapshot <snapshotDir> [s0]

    hdfs dfs -createSnapshot test

  5. CDM通过HDFS Snapshot复制文件至MRS。CDM的作业配置:
    • “源目录或文件”输入:/hbase/data/default/src_test/.snapshot/s0
    • 目的端“写入目录”输入:/hbase/data/default/表名
  6. 执行fixMeta和fixAssignments等命令恢复表,参考使用命令恢复历史不变的数据
  7. 在CDH集群中删除快照:

    hdfs dfs -deleteSnapshot <snapshotDir> s0

恢复表时的问题处理

  1. 执行完fixMeta命令后,报错显示“xx inconsistent”

    fixMeta命令是校验HDFS和HBase元数据一致性,出现这个提示是正常情况,继续执行fixAssignments命令即可。

  2. 执行完fixAssignments命令后,报错显示“xx inconsistent”

    fixAssignments是让所有Region上线,偶尔会出现部分Region上线较慢,可以再执行一次以下命令检查一下:

    hbase hbck 表名

    如果出现“Status : OK”则表示HBase表恢复成功。

  3. 执行完fixAssignments命令后,错误提示多个region有相同的startkey,部分region存在overlap情况:

    可以再执行:

    hbase hbck –fixHdfsOverlaps 表名

    执行完毕后再执行fixMeta和fixAssignments命令。