hbase快照同步到目标集群出现ERROR Multiple regions have the same startkey问题分析
问题现象
源集群表split/merge过程中创建快照,该快照同步到目标集群,目标集群恢复快照后,进行hbck检查,就会出现异常报错:
ERROR Multiple regions have the same startkey;
问题分析
首先,出现上述问题可能有如下两种原因:
- 源集群中snapshot表本身就存在这种问题,没有修复就执行snapshot,导出快照到目标集群,然后恢复表也会存在这种问题。
- 在执行split/merge的同时执行了snapshot,若此时子region上线但父region还没下线,这样snapshot信息中会同时有父、
子region同时线的情况。这种情况导出快照到目标集群恢复快照,就会父、子region同时上线,当然会出现重叠的情况。
经确认是在split/merge过程中创建的快照,因此判断恢复快照出现重叠情况为上述第2种情况。
snapshot程序代码优化方案:
- 通过查询meta表,获取表的region信息后,判断父region是否下线,父region下线再执行snapshot。
这种方式可通过查询meta表获取父region的split列和offline列,判断两列的值是否同为true,同为true说明父region已完成分
裂并且下线了。建议查询meta表时使用行健前缀过滤器进行查询只与操作表相关的信息
在代码中可按照如下方式进行判断:
Scan scan = new Scan();
scan.setRowPrefixFilter(Bytes.toBytes(“test_table