小言_互联网的博客

hbase写入一段时间后变的越来越慢

342人阅读  评论(0)

一、概况

集群环境如下表:

集群 机器 存储 内存 CPU 每日数据        
HW大数据平台 160台 6PB 10TB 8000 10亿        

 

数据存储在kafka中,130个分区,采用sparkstreaming将数据清洗后,通过phoneix批量写入hbase。

 

二、kafka原因排查

sparkstreaming拉取kafka的时候,卡死在这一步,如下图所示:

sparkstreaming读取kafka的数据采用Direct 模式读取kafka数据,检查点在客户端维护offset,任务运行不是很稳定,偶尔会出现延迟几分钟。

  • 推测执行
  • kafka客户端版本
  • offset跳跃

三、hbase原因排查

hbase写入慢的时候,查看线程堆栈,发现卡在这一步,如图所示: 

  • 写热点
  • hbase的处理线程数
  • hbase的memstore大小
  • hbase的flush、合并、split
  • 代码频繁创建连接

四、规律搜集

上述问题排查了已经一个月了,各种办法都试过了,期间kafka端的阻塞已经解决了,写入hbase慢。各种百度,以及hbase的原理也看了一遍又一遍,大数据平台上的监控也一直盯着看,也没有解决写入慢的问题。

到这一步基本可以确定是hbase写入延迟导致sparkstreaming任务延迟越来越高。

10s钟一个批次的任务,5*26个处理core,基本从下午4点半到第二天早上9点半都很快,在3s中左右处理完成,期间虽然写入有波动,但是基本都可以很快平稳,但是9点半以后基本每个批次都要10s以上,sparkstreaming延迟越来越高,每个批次写入的数量和之前并无变化,也没有数据倾斜。

                              

因为sparkstreaming的日志都比较散,很艰难的发现了。

#1, waiting for 2 actions to finish on table: WIFI_MAC_FAST_QUERY

Left over 2 task(s) are processed on server(s): [xlhd-b1805-hbase41,21302,1568195573413]

客户端写等待,这不是很正常嘛,可能是服务端内部活动,导致的吧?唉,于是想收集一下,看看是不是写等待多的时候,导致sparkstreaming,这怎么统计????。

幸好,现场之前基于elk做过日志搜集,采用扩展logback的插件,将数据直接从服务接引到es,并且成功集成了sparkstreaming,tomcat,springboot等框架,于是将o.a.h.h.c.AsyncProcess类打的日志采集到es,去寻找规律。

                                           

上图真是来的太及时了,搜集了sparkstreaming散开的日志,聚合在一起,发现写等待还是比较大的,但是最重要的发现是写等待的regionserver居然都是hbase41这个节点,难道有热点写,去大数据平台查看,没有发生热点写,每个regionserver的请求很平稳,于是登陆这台机器进行一通linux命令,top,iostat,sar,ifconfig,ping等,发现丢包,哈哈。

                                          -

于是将该节点的regionserver停掉,发现基本每个批次3s左右都可以处理完,通知运维去机房解决网络问题。

 


转载:https://blog.csdn.net/weixin_36647532/article/details/101026923
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场