HBase2.x之RIT问题解决方案

1 问题描述

Region-In-Trasition机制

从字面意思来看,Region-In-Transition说的是Region变迁机制,实际上是指在一次特定操作行为中Region状态的变迁,例如merge、split、assign、unssign等操作。RIT问题指的是在RIT过程中出现了异常情况,然后导致region的状态一直保持在RIT,使得HBase出现异常。

2 解决方案

2.1 方案一

检查hdfs的健康度,是否有hbase的文件丢失或损坏,运行命令hadoopfsck /,结果如下:

HBase2.x之RIT问题解决方案

排除hdfs丢失block的问题。如果出现hdfs的block损坏或丢失的情况,可以通过hdfs的修复命令进行修复。

2.2方案二

在HBase1.x系列中RIT问题通常可以通过hbasehbck–repair操作完成修复。但是在HBase2.x系列中,该命令还没有支持,所以暂时无法通过这种命令完成修复。结果如下:

HBase2.x之RIT问题解决方案

第一次执行发现没有权限,root用户不是hdfs的超级用户,安装提示需要以hbase用户去执行该命令。修改如下:

suhbase -s /bin/sh -c “hbasehbck -repair”

HBase2.x之RIT问题解决方案

提示为hbase有其他线程正在执行hbck fix命令,但是其实没有这种命令,其实从这里就可以看出HBase2.x对于-repair的支持是不够的。我按照提示删除了hdfs(/hbase/.tmp/)上的hbase-hbck.lock文件,重新运行命令如下:

HBase2.x之RIT问题解决方案

2.3方案三

根据RIT状态执行assign或者unassign命令,状态信息如下:

HBase2.x之RIT问题解决方案

经过查询资料,解决方案如下:

HBase2.x之RIT问题解决方案

hbase shell多次执行 unassign '20acfcbd68fd624a78bb34c88f9382d1'和unassign '20acfcbd68fd624a78bb34c88f9382d1' , true都超时结束,通过修改rpc和zk的超时时间都无法完成(正常超时时间为60000ms,我修改为600000ms)。

2.4 方案四

经过多次试验,最终都无法使得HBase回复正常,最终决定删除进行测试。

Zookeeper节点删除:

通过hbasezkcli命令进入Zookeeper命令行界面:

HBase2.x之RIT问题解决方案

我想删除节点 /hbase-unsecure/region-in-transition,但是发现并没有该节点,经过资料查询了解到HBase2.x的RIT状态并不像HBase1.x系列存储在Zookeeper上。经过测试删除/hbase节点重启hbase并不能解决RIT问题。

HBase表删除:

hbase shell>disable M_TDY_PT_LCZZ

disable失败,所以正常删除表操作无法执行。需要进行暴力删除,暴力删除指的是从元数据进行删除。

先停掉HBase

删除hdfs表目录(记得先备份,等下回复用)

hdfsdfs -cp /hbase/data/hospital/P_TDY_DASC_DE02_01_039_63 /

hdfsdfs -cp /hbase/data/hospital/M_TDY_PT_LCZZ /

hdfsdfs -rm -r -skipTrash /hbase/data/hospital/P_TDY_DASC_DE02_01_039_63

hdfsdfs -rm -r -skipTrash /hbase/data/hospital/ M_TDY_PT_LCZZ

delete 'hbase:meta','rowkey','column',rowkey信息可以去hbase的ui去看到:

HBase2.x之RIT问题解决方案

HBase2.x之RIT问题解决方案

然后重启HBase,但是发现问题没有解决。

hbase shell查询数据看到hbase的meta删除失败了,原本的meta信息还在:

HBase2.x之RIT问题解决方案

然后重新删除(delete命令换成deleteall命令):

HBase2.x之RIT问题解决方案

HBase2.x之RIT问题解决方案

再删除Zookeeper中的/hbase节点,重启HBase发现RIT问题已经解决了。

后续就是重建表,然后恢复数据了。

PS:想了解更多,关注订阅号领取更多资源

HBase2.x之RIT问题解决方案


分享到:


相關文章: