hbase集群create table慢导致上层业务任务失败

1. 问题背景

* 集群情况 
版本: 社区版1.2.6
表数: 8k+
regions数: 1w+
regionserver数: 23台

* 问题描述 
kylin上层业务会去创建对应的hbase table,如果超时的话,任务会失败
在业务高峰期,发现create table的api时间特别长,最长的时间有超过10min,超过了kylin create table api的timeout时间

2. 问题排查
* 通过排查日志,定位到卡顿的位置在org.apache.hadoop.hbase.master.assign(final ServerName destination, final List<HRegionInfo> regions)中 

上图中,LOG.info(“8”)是自己打的断点信息

* 通过日志,发现上述截图中两个阶段之间的耗时超过10s 


* 从org.apache.hadoop.hbase.master.assign(final ServerName destination, final List<HRegionInfo> regions)的assign方法里面来看,其中间有个asyncSetOfflineInZookeer的逻辑.其具体做的事情是,为需要assign的region在zookeeper里面异步建一个/hbase/unassign的znode,并为hmaster创建一个watcher

* 再底层的业务细节涉及到zookeeper相关的操作,还没有来得及debug
* 后面,尝试重启了hmaster,性能恢复了.下图是上述assign方法过程暴露出来的assign时间的metrics,在重启后(框框中的时间),create table的时间从10min级别恢复到秒级别,已经不影响业务层可用性


2. 问题结论

* 如果只是操作zookeeper,理论上不会这么慢.有几个怀疑点:
   * GC问题导致:排查过hmaster和regionserver的日志,没有发现明显的长时间full gc
   * 重启master集群,可以让性能恢复的话,怀疑还是跟某些线程池有关系.比如负责创建znode的zookeeper connection线程卡顿
   * 看看大家是否有什么排查的建议
已邀请:

hbase - 80后

赞同来自: louShang

图片没有出来

要回复问题请先登录注册


中国HBase技术社区微信公众号:
hbasegroup

欢迎加入HBase生态+Spark社区钉钉大群