hbase2.x RIT(region in transition)背景知识

在hbase1.x中transition是令广大大数据运维人员头疼的一个话题,因为,region 的状态转移涉及到了三个核心组件,分别为:hbase master,zookeeper和hbase 的regionserver,这三个组件中的某一个region的状态都是一致的情况下,这个region 才算是正常,状态转移过程及其复杂,hbase 集群很容易出现RIT。

好消息是,hbase2.x中,把zookeeper 中的状态取消了,region 的状态直接在master 和 regionserver 直接变化。

在hbase2.x 中几乎所有的集群操作都是通过procedure进行的,这也就意味着,产生异常的过程大部分都是在proceduer中,比如region opening 过程卡死或者closing 过程卡死,最终都会导致region 的状态有问题,即产生region in transition。

好消息是,hbase2.x中有个工具HBCK2,这个工具可不是简单的hbase1.x中hbck 的升级,变化有点大,详细变化请参考帮助文档(https://github.com/apache/hbase-operator-tools/tree/master/hbase-hbck2)。这个工具的工作实际就是修复各种不正常的procedure。(本文已提供工具免费下载)

一.RIT region长期处于OPEING 

如果RIT中的region长期处于opening状态,按以下步骤排查:

1.查看该region对应的regionserver日志,搜索该region名字,看有没有报错

1)如果有报错,提示有坏的hfile文件(如下图),

则把hfile文件mv走,mv hfile之后一般情况下该region会自动好,如果还是处于RIT,就先bypass掉相关procedure,然后再unassign,再assign一下

2)如果有报错The new max sequence id 1 is less than the max sequence id

方法1:disable 表,再enable 表

方法2:

对于从hbase1迁移到hbase2的表,如果表的DATA_BLOCK_ENCODING是PREFIX_TREE,由于PREFIX_TREE在hbase2里已废弃,所以需要修改

2.如果该region对应的regionserver日志中没有明显错误,就先bypass掉相关procedure,然后再把region设置为OFFLINE,再assign一下

如果还是不行,就先bypass掉相关procedure,然后再把region状态设为OFFLINE,再unassign,再assign

二.RIT region长期处于CLOSING

1.先bypass相关procedure,再把region状态设置为CLOSED,然后再assign

hbase hbck -j hbase-hbck2-1.0.0.0-SNAPSHOT.jar setRegionState region名字 CLOSED

三.RIT region长期处于OFFLINE

把region assign

四.某个hbase表已经删除,但是还有这个表相关的region处于RIT

处理步骤:

1.bypass 该region相关的procedure

2.从meta表查看该region的信息

3.deleteall从meta表删除该region

4.切换hmaster

hbase UI上的RIT应该是从meta表里拿的状态为OPENING、OFFLINE等中间状态的region。从meta表里删了的,切了hmaster之后就没有了;状态改为CLOSED的region, CLOSED不是中间状态,是最终状态了,所以也就没有了。

五.hbase2 HBCK Report Region Holes

Hbck report中显示有holes。Region Holes(Region空洞:Region不连续)

查看该问题可通过master UI界面的HBCK Report查看

解决方法很简单,直接使用 hbck2 提供的 fixMeta 操作即可。

在 Usage 说明中能看到 fixMeta 能够修复 ‘holes’,‘overlaps’ 等 region 问题,但是需要注意必须确保 hbase:meta 是健康的状态下进行修复操作!也就是确保表里的所有 region 都是 OPEN 状态再进行此操作,确保不会对集群造成额外的影响。

执行命令

hbase hbck -j $HBASE_HOME/lib/hbase-hbck2-1.3.0-SNAPSHOT.jar fixMeta

等待一段时间,这个过程可以监控 master 日志,如果一切顺利问题就解决啦。

六.Hbck report Unkown server处理

base 查询出现org.apache.hadoop.hbase.NotServingRegionException:

table.region is not online on hregionservername

重启hmaster,出现region无法自动分配,assign region也无法重新分配。

查看hbck report 发现有unknown servers的问题。

原因:regionserver的name发生变化。删除掉当前未知的regionsever,恢复正常

hbase hbck -j hbase-hbck2-1.3.0-SNAPSHOT.jar scheduleRecoveries unknowservername

 

批量脚本

如果有多个region需要处理可以使用批量脚本

1.批量bypass

从页面http://hmaster主机:16010/procedures.jsp拿到procedure id列表

然后批量bypass

2.批量unassign

从页面http://hmaster主机:16010/master.jsp拿到region列表

3.批量assign

4.批量set offline

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: