问题描述:

         正式环境 hbase集群与多个中间件集群共用5台服务器导致这5台服务器整体资源使用紧张,内存、磁盘I/O一直处于上限附近,由于hbase节点挂掉后处理不得当,导致 存在HDFS上的数据块损坏,清理HDFS上的数据导致Hbase Region上的数据出现不一致,重启hbase集群后一直报错如下图:

HBase region 手动split hbase regions in transition over threshold_重启


解决方案:

提示:这里填写该问题的具体解决方案:

例如:新建一个 Message 对象,并将读取到的数据存入 Message,然后 mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();换成 mHandler.sendMessage()

1、首先我们删除 hbase:meta 中的region元信息,该表已经不再在了,元信息也是没有用的垃圾数据。

HBase region 手动split hbase regions in transition over threshold_hbase_02

上图框中的内容就是存在 meta表中的rowkey,直接去删除就可以。

注:不会出现数据丢失的情况大家可以放心删除

 2、进入hbase sehll 删除meta表数据

hbase(main):001:0> deleteall 'hbase:meta','VIDEO_INFO_TABLE,f4bb69af5388ac3e1021e3c3614a7e21,1669339812795.134ea5559fe0b7705bda43b2db0419b2.' 
Took 0.9522 seconds
hbase(main):002:0> deleteall 'hbase:meta','BLBL_VIDEO_COMMENT_TABLE,t_bilibili_2534107324,1670848768880.a928438d66bfc2f4396893a9835ad663.'
Took 0.0168 seconds

 3、停止hbase集群中master服务

4、删除/hbase/MasterProcWALs 下的所有文件。

注:不删除该文件,master重启后会读取该日志文件,报错无法消除 ,正式环境在删除前请先备份。本人通过hdfs图形化管理直接下载备份到了本地,在删除重启后并无发现数据丢失,还请放心执行

hdfs dfs -rm /hbase/MasterProcWALs/*

若不删除该日志文件,重启master服务,会发现RIT还是存在,但是state变成了OFFLINE,server 变成 null

5、重启Hbase

发现已经没有RIT问题了,并且Hbase上出问题的相关表也消失了。

6、进入hbase sehll 平衡节点,balance_switch false 关闭平衡命令,balance_switch true 打开平衡命令,集群一般建议打开平衡。

hbase(main):004:0> balancer
true                                                                                                                                          
Took 159.5604 seconds

关闭平衡会提示如下,遇到这种情况我们执行 balance_switch true 打开平衡就解决了。

HBase region 手动split hbase regions in transition over threshold_hbase_03

注:

当RIT发生的时候,是执行不了 balance 的,所以RIT的状况要及时解决。

正常使用情况下的RIT问题基本不需要处理,这种RIT问题出现的频率不会很高,删除元数据需谨慎,最好在测试环境测试后,再在生产环境使用。