《优雅升级HBase》中不太“优雅”的情况

大致情况

最近master重启时间被我弄好了,我正准备大干一场给HBase升级一个版本,没想到危机都藏在水底,当我准备一个分组一个分组的升级的时候,突然看到了RIT告警...

我心里一慌,什么情况,master的瓶颈应该已经没有了才是,为什么还会有RIT,为什么,他NN滴!差点儿变身穿山甲的我带着小紧张的心情打开了log,看到了这样一副画面

我没来得及追查问题,我先直接将RS进行紧急关闭,让region强制移动出去并中断一切操作,然后RS会被自动拉起,基本会被分配到这个节点(因为这个节点压根一个节点都没有)

move的时候,如果没有指定目标,那么规矩和balance差不多,百分百会被分配到原来的节点上

可怜我的dest节点都做好了接收region的准备,结果你说不去就不去了?!不行!不过去不准停!所以现在RS如果不重启也许会一直卡在这里,然后等待某个事件的发生,但我必不可能让这件事情发生,因为这样的话可能就会有电话要来找我了

region mover频繁失败,这里是因为正在RIT,所以直接不算online了

INFO  [Ruby-0-Thread-35: /home/hbase/software/hbase/bin/thread-pool.rb:28] client.RpcRetryingCaller: Call exception, tries=10, retries=100, started=191286 ms ago, cancelled=false, msg=org.apache.hadoop.hbase.HBaseIOException: moving region not onlined:

compaction触目惊心

纳尼,居然有24小时还没做完的compaction,我也没看到网络有堆积的情况,这样子根本不可能到300M,compaction你故意找茬是吧

看到log有很多这样的地方,说明region move会造成compaction不正常终止,到这一步都很正常

那么我大胆猜测RIT的节点正是那些compaction还没有抛出这个异常的地方,一直卡在pending_close

于是我又求证了几次,发现RIT的region都是在compaction抛出这个异常之后就正常移动了,那么compaction究竟是什么时候接收到的Interrupted?

目前有2个问题:

1.为什么compaction执行了如此久,compaction队列没阻塞,同时也没有到达限流300M

2.compaction什么时候才会抛出这个异常?

第一个问题暂且不追究,既然compaction能做完并且对集群没有影响那么就先放着吧(绝不是因为找了半天啥也没找到所以不找了,然后为了自己的面子才这么说的)

第二个问题:

很快啊,我就在REGION doClose里面发现了这个玩意

在region关闭之前,一定需要等待flush和compaction都安全的关闭才行喔~

 然后不出我所料的出现了interrupt,中断这些线程吧!👴🏻要去别的地方安家咯~

(别急,优雅升级完了你还会回来的,现在放这些狠话)

(您这不是因为bug结果导致我没能回来嘛)

(不,我解释过了,出问题的region会原封不动的待在原地,所以..你只能出去一下下)

其中的writeState是一个非常神奇的变量~ 会追踪compaction的进度,可以自行查看哦,就是一个原子类而已啦实际上!

所以region move会卡主,并且造成RIT的原因就是compaction的状态无法获取,无法优雅的关闭,那么只能我手动kill了

解决办法:如果发现RS在做compaction多个心眼,后面再重启吧0.0 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值