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文章来源:https://www.toymoban.com/news/detail-770167.html
文章来源地址https://www.toymoban.com/news/detail-770167.html
到了这里,关于hbase2.x hbck2处理region方案(长期opening\closing\offline,Report Region Holes,report Unkown server)等的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!