模拟异常发现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: