HBase1.x运维:Multiple regions have the same endkey报错

软件版本:

    hadoop2.7.3

    hbase1.2.5

    zookeeper3.4.6


1.问题描述:

 

  生产HBase集群由于批量导入20亿数据之后,集群上产生了很多的region,各个Regionserver上的region负载已经达到了1200,很多数据表的region已经不在线,在手动执行major compact之前没有用hbase hbck命令进行集群状态检查和修复,直接执行大合并脚本进行了region的合并,等执行完大合并之后再去执行hbase hbck的时,输出以下报错信息:

ERROR: (region TABLE_NAME, rowkey_value, region_name_1) Multiple regions have the same start key: rowkey_value ERROR: (region TABLE_NAME, rowkey_value, region_name_2) Multiple regions have the same start key: rowkey_value ERROR: (regions Table_Name, rowkey_value, region_name_1 and Table_Name, rowkey_value, region_name_2) There is an overlap in the region chain. ERROR: Found inconsistency in table TABLE_NAME


2.问题分析


    产生这种问题可能有以下两种情况:

1).整个集群由于region负载过高,数据表的部分region由于某些原因没有上线,通过hbase hbck 相关的修复命令进行了修复,再次重启后region原来的region又可以重新上线,导致两个region重叠(个人觉得这种可能性比较小)。

2).整个集群由于region负载过高,数据表的部分region由于某些原因没有上线,我没有进行hbase hbck健康检查,直接运行了脚本进行了大合并,导致某些Region在合并过程中,生成了新的region,而原来的两个region没有删除成功,导致有些region的startkey或者endkey重叠的现象。


    下面我从生产环境的截图,为了方便理解,我对图中的Region进行了简单的标注,可以看出两个region2、region3的endkey都有c4,而region2的startkey和region1是连续的,region3的startkey与region1是不连续的,这里说明region3应该是合并之前应该删除而未删除的信息,存在冗余。

图片


3解决方案:


1).需要删除region3在hbase:meta对应的数据,在hbase:meta表中,rowkey对应的就是region的ENCODED_REGIONNAME名称,先查看下:

图片

    由图可知,meta表中有该region有6列,直接使用delete删除,该rowkey对应的6列数据即可,删除命令:

delete 'hbase:meta','region名称','列名称'


2).删除meta表中的元数据后,还需要从hdfs上删除,该有问题的region对应的hdfs目录,如不删除,重启hbase,通过hbase hbck -fixMeta等命令生成元数据时,会重新生成,删除命令。

hadoop fs  -rm -r -f /apps/hbase/data/data/命名空间/表名/region名


3).为了保险起见,我这里还删除了HBase在zookeeper上的znode缓存数据,让他下次重启重新生成。


4).重启hbase,可通过界面查看该表已经不存在重叠的region,使用hbase hbck查看hbase的状态,状态为OK,问题解决。


猜你喜欢

转载自blog.51cto.com/15080019/2653844