
# MRS中恢复HBase表
CDH HBase表目录已经迁移到MRS HBase后，可以使用命令恢复。对于那些会变化的数据，需要使用快照保证数据不变，然后再迁移并恢复。
#### 约束限制
本方案仅支持迁移数据到MRS 1.x版本集群，2.x及之后版本无法通过HBase修复命令重建HBase表。
![](https://support.huaweicloud.com/bestpractice-dataartsstudio/public_sys-resources/notice_3.0-zh-cn.png)
迁移的目标集群为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命令。
   
 
