一次HBase读超时的调优

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 现象:因为系统实时性要求比较高,HBase超时时间设置为2秒。偶尔会出现(几个小时)出现一波超时的情况,看了监控IO、CPU等并没有出现明显大波动。不过集群是高读写的,每秒几万的请求。就开始参与协助帮忙集群的排查、调优工作。汗,最关键的是集群都用上了SSD,这是开大的节奏。先来看看HBase主要的几个参数:1、major compaction(大合并操作,几天执行一次,或者手动执行。对IO影响很大,对性能影响也很大)2、memstore:regions数量、列簇数量有影响 ,一个列簇就需要一个memstore ,会占用region server的内存。3、负载均衡:是不是某

现象:因为系统实时性要求比较高,HBase超时时间设置为2秒。偶尔会出现(几个小时)出现一波超时的情况,看了监控IO、CPU等并没有出现明显大波动。不过集群是高读写的,每秒几万的请求。就开始参与协助帮忙集群的排查、调优工作。

汗,最关键的是集群都用上了SSD,这是开大的节奏。

先来看看HBase主要的几个参数:

1、major compaction(大合并操作,几天执行一次,或者手动执行。对IO影响很大,对性能影响也很大)

2、memstore:regions数量、列簇数量有影响 ,一个列簇就需要一个memstore ,会占用region server的内存。

3、负载均衡:是不是某几台机器负载特别不均衡,请求倾斜严重等?

大家遇到的主要问题无非是Full GC异常导致宕机问题、RIT问题、写吞吐量太低以及读延迟较大。

flushQueueLength,从监控来看队列大部分时间保持为0,说明集群刷写的速度跟的上。

blockcache命中率等指标也正常。

听到集群每个节点才配置8G内存,这么多读写。感觉配置可能有点不对。就开始排查是否GC影响,开始加上详细的打印日志。内存不足容易导致晋级失败等等,实时性下降。

控制台可以看出每台服务器regions的数量是450-500之间,官方建议每台服务器200个region以内,最好100个左右。但其实400-500也无妨。
因为每个Rergion每个Family就算不写数据,的MemStore本地缓存需要2M,如果500个regions和1个family,就算不存储任何手游购买平台数据也要1G左右的堆内存空间。
通过公式:

((RS Xmx) hbase.regionserver.global.memstore.upperLimit) / (hbase.hregion.memstore.flush.size (# column families))

=8G 0.4 / 128m 1 = 支持26个family频繁写入

通过增加GC的详细日志可以看出偶尔会出现晋级失败等情况。

最低CMS垃圾回收压缩后的内存至少需要6.5G,memstore可能需要3.5G ,控制台看出blockcached 也需要3.5G,预留2G给新生代,所以就给内存配置了18G。

总结下GC容易出现:

一.并发模式失败(concurrent mode failure)

行CMS GC的过程中同时业务线程将对象放入老年代,而此时老年代空间不足,这时CMS还没有机会回收老年带产生的,或者在做Minor GC的时候,新生代救助空间放不下,需要放入老年带,而老年带也放不下而产生的。

二. 提升失败(promotion failed)

在 Minor GC 过程中,Survivor Unused 可能不足以容纳 Eden 和另一个 Survivor 中的存活对象, 那么多余的将被移到老年代, 称为过早提升(Premature Promotion)。 这会导致老年代中短期存活对象的增长, 可能会引发严重的性能问题。 再进一步, 如果老年代满了, Minor GC 后会进行 Full GC, 这将导致遍历整个堆, 称为提升失败(Promotion Failure)。

根据几次日志调整NewSize以及Survivor、Heap大小以后,就开始比较稳定,几乎没有出现超时等情况。

总结:

从HHBase控制台首页明显看出很多东西:

1、内存使用情况

2、读写占比情况

3、Num. Stores情况

等等,有很多帮助,请多多留意。

当然当磁盘IO很重时,JVM可能会被阻挡相当长的时间,解决方案应该是通过将服务器上面一些日志文件放在单独的HDD或高性能磁盘(如SSD)上来避免IO争用。

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
7月前
|
SQL 存储 分布式数据库
bigdata-28-HBase基本调优策略
bigdata-28-HBase基本调优策略
96 0
|
存储 缓存 固态存储
HBase 性能调优第一弹:内存篇
这是使用 HBase 最不可避免的一个话题,就是 HBase 的性能调优,而且通常建立在我们对 HBase 内部运行机制比较了解的基础上进行的,因此无论怎么说,调优这块都是一个相对复杂的事情。这一篇我们先来介绍与 HBase 内存最相关的调优内容。 1. 合理配置 JVM 内存 这里首先涉及 HBase 服务的堆内存设置。一般刚部署的 HBase 集群,默认配置只给 Master 和 RegionServer 分配了 1G 的内存,RegionServer 中 MemStore 默认占 0.4 即 400MB 左右的空间,而一个 MemStore 刷写阈值默认 128M,所以一个 Regi
974 0
|
5月前
|
DataWorks 数据管理 大数据
DataWorks操作报错合集之在连接HBase时出现超时问题,该怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
存储 缓存 大数据
大数据HBase调优
大数据HBase调优
83 1
|
运维 Java 分布式数据库
硬吃一个P0故障,「在线业务」应该如何调优HBase参数?(二)
硬吃一个P0故障,「在线业务」应该如何调优HBase参数?(二)
383 0
硬吃一个P0故障,「在线业务」应该如何调优HBase参数?(二)
|
存储 SQL 缓存
硬吃一个P0故障,「在线业务」应该如何调优HBase参数?(一)
硬吃一个P0故障,「在线业务」应该如何调优HBase参数?(一)
309 0
硬吃一个P0故障,「在线业务」应该如何调优HBase参数?(一)
|
存储 弹性计算 网络协议
[原创]TCP的backlog导致的HBase访问超时问题排查(续)
接前一篇文章 TCP的backlog导致的HBase超时问题 https://yq.aliyun.com/articles/117801?spm=5176.8091938.0.0.kypXIC ##问题场景 ![1.jpg](http://ata2-img.cn-hangzhou.img-pub.aliyun-inc.com/9fda470aa6727587b15909e9a0
3069 0
|
网络协议 API 分布式数据库
Hbase集群搭建及所有配置调优参数整理及API代码运行
  最近为了方便开发,在自己的虚拟机上搭建了三节点的Hadoop集群与Hbase集群,hadoop集群的搭建与zookeeper集群这里就不再详细说明,原来的笔记中记录过。这里将hbase配置参数进行相应整理,方便日后使用。
1240 0