模拟异常发现hbase删表超时重试机制(0.90.3)

上一篇 / 下一篇  2012-04-18 19:48:15 / 个人分类:分布式技术学习

背景:

模拟各种异常情况下hbase的处理结果,其中包括重试多少次,超时多久等。一般想zookeep连不上,master挂掉等异常测试都是抛出各种异常并 且重试一定次数退出,并且能观察到重试的过程及抛出异常的过程。有一种情况,按照默认的配置不报错,不抛异常,不退出长达50分钟之后才会抛等待过长的异 常退出。

模拟方法:

在执行presharding建表的过程中,执行drop这个表,那么disable 表的时候就会失败,开始进入重试超时等待的过程。

原因及解决方法:

在默认的情况下:hbase.client.retries.longer.multiplier=10 ,看查看hbase删表的源码:

disableTableAsync刚开始执行在create还没执行之前一定是成功的,只会就会一直检查表的状态是online还是 offline,而那边create如果又会把disable过的region置为enable,那么后面只能不停的循环得到enable。这样就进入了 等待超时的循环中。


也就是说tries=10*10=100;

前10次sleep:1000*(1+1+1+2+2+4+4+8+16+32)=71000

后90次sleep:90*1000*32=2880000

总共:sleep:2951000(java的Thread.sleep单位是毫秒)=2951s=49m

这就解释了,为什么执行长达50分钟才退出。

目前是执行的时候加上set hbase.client.retries.longer.multiplier=2。相当于重试20次,大概10分钟的重试时间可以接受。


TAG:

 

评分:0

我来说两句

Open Toolbar