HBase:Multiple regions have the same startkey,There is an overlap in the region chain.问题详解

环境信息:

Hadoop 2.7.2+HBase 1.2.2

现象:

HBase重启后运行hbase hbck报错:

Multiple regions have the same startkey:XXXX

There is an overlap in the region chain.

问题分析:

1、HBase在重启之后由于某些原因一部分region未分配成功而上线失败,执行HBase hbck -FixMeta后,HBase自动将缺失的Region尝试进行修复(可能未成功),再次重启后,原来的Region又可以上线了,就导致两个Region含有共同的startkey

2、由于HBase Region的startkey与endkey是唯一且连续的,所以当出现不同Region有相同的startkey后,就引发了There is an overlap in the region chain问题

问题分析:

1、根据startkey找到相关的region

2、发现两个Region都上线成功了,此时需要判断到底哪个Region是HBase修复时产生的,此处需要查询HBase的meta表:"hbase:meta"进行确认,图示的后三个region都有可能是受影响的Region,通过查询可以得到以下信息,进入hbase shell,执行命令:get ‘hbase:meta’,‘tracklog_2018,1670a307153,1532330661852.24440cf42a91eb7745b697e03ea751f2.’(该region数据rowkey的组成为:表名,Region的startkey,Region创建时的timestamp,Region的ID,此处可以直接得到Timestamp的值,也可以去meta表里查询,理论上来说两者是一样的),将三个Region的数据都进行查询(注:由于HBase的WEB页面Region的名称是将HBase中的数据转化为字段串得来的,所以Region名称中如果有特殊字符无法直接使用命令查询,需要进行转义或者借助Java代码进行操作),结果如下:

此处我通过timestamp的值进行比较,此为数据生成时间,发现上下两个都是刚刚的同一时间产生的,而中间一个是很久之前生成的,基本可以判定上下两个region为后生成的region。

此处可以去HDFS上的HBase文件中进行确认,hadoop fs -du -s -h /hbase/data/default/tracklog_2018/24440cf42a91eb7745b697e03ea751f2(Region的ID),执行三次,发现旧的region的大小正好等于新创建的两个region大小的总和,进一步确认了关系

问题解决:

1、通过hbase shell或者java客户端删除有问题的hbase:meta表中的数据,该例子中为两条数据,千万小心别删错了

2、执行stop-hbase.sh停掉hbase

3、去hdfs上删除有问题region对应的hdfs目录

4、使用start-hbase.sh启动hbase

5、使用hbase hbck查看hbase的状态,状态为OK,问题解决(第一个startkey相同的问题解决了,第二个问题自动就解决了)

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值