HBase Memstore数据刷写与阻塞机制深入剖析及参数优化-OLAP商业环境实战

栏目: 数据库 · 发布时间: 6年前

内容简介:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。版权声明:禁止转载,欢迎学习。QQ邮箱地址:1120746959@qq.com,如有任何学术交流,可随时联系。网上的Hbase调优资料参差不齐,实在是不忍卒读,有些都是拼凑且版本过时的东西,我这里决定综合所有优质资源进行整合,写一份最全,最有深度,不过时的技术博客。辛苦成文,各自珍惜,谢谢!版权声明:禁止转载,欢迎学习上面两个数的乘积默认为512

本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。版权声明:禁止转载,欢迎学习。QQ邮箱地址:1120746959@qq.com,如有任何学术交流,可随时联系。

网上的Hbase调优资料参差不齐,实在是不忍卒读,有些都是拼凑且版本过时的东西,我这里决定综合所有优质资源进行整合,写一份最全,最有深度,不过时的技术博客。辛苦成文,各自珍惜,谢谢!版权声明:禁止转载,欢迎学习

1 Memstore的角色地位

  • 一个Store中总会有一个Memstore和多个HFile,每一次刷写就会生成一个HFile。
  • 如果你开启了BlcokCache,那么读取数据时会首先查询BlockCache,当BlockCache查不到数据时,就会去查询MemStore+HFile的数据。
  • 这里要明确一下,完整的数据集合包含了MemStore中的数据和落盘的HFile文件。
  • MemStore的实现目的不是加速数据的写入,主要是维持HBase中的数据按照rowkey顺序来存储,所以先使用MemStore先对数据进行整理 排序 后再持久化到HDFS。
HBase Memstore数据刷写与阻塞机制深入剖析及参数优化-OLAP商业环境实战

2 Memstore的各种阻塞

  • 经常会遇到性能问题,写操作被Block住了,其实大部分情况只要了解MemStore的刷写机制和HFile的合并机制后,就可以着手解决写操作被Block住的问题。

2.1 数据刷写时机一(hbase.hregion.memstore.flush.size)

  • 当Memstore占用的内存大小达到hbase.hregion.memstore.flush.size的配置值得时候就会触发一次刷写,生产一个HFile。

    悖论 :但是问题来了,因为MemStore的刷写存在一个定期检查时间,有时候可能数据增长速度太快,在还未达到检查时间之前,数据就达到了hbase.hregion.memstore.flush.size的好几倍,从而被阻塞住了。

2.2 memstore阻塞情况一

  • hbase.hregion.memstore.flush.size 默认阈值是128MB
  • hbase.hregion.memstore.block.multiplier:是一个倍数,默认是4。

上面两个数的乘积默认为512M,因为MemStore的刷写存在一个定期检查时间,在下一次刷写检查到来之前若达到了这个阈值,就会立即触发刷写,同时阻塞住所有的写入该Store的写请求。

2.3 数据刷写时机二 (globalMemStoreSize)

  • globalMemStoreLimitLowMarPercent:

    全局的memstore刷写下限,过去通过配置hbase.regionserver.global.memstore.lowerLimit来定义,现在统一改成: hbase.regionserver.global.memstore.size.lower.limit。该配置项是一个百分比,所以取值在0.0-1.0,默认是0.95。

  • globalMemStoreSize表示全局memstore容量,这个值计算方法如下:

    hbase_heapsize(Regionserver 占用堆内存大小)*hbase.regionserver.global.memstore.size
    复制代码

    hbase.regionserver.global.memstore.size的默认值是0.4,一旦达到这个阈值,就会触发一次强制的刷写。

2.4 memstore阻塞情况二(global.memstore.size):

当hbase_heapsize(Regionserver 占用堆内存大小)*hbase.regionserver.global.memstore.size 大小达到阈值时,就会阻塞整个HBase集群的写入。

举例:hBase堆内存的大小为16GB,hbase.regionserver.global.memstore.size是0.4
  ,hbase.regionserver.global.memstore.lowerLimit为0.95
  ,那么触发刷写的阈值为:
         16*0.4*0.95=6.08
         
举例:hBase堆内存的大小为16GB,hbase.regionserver.global.memstore.size是
    0.4,hbase.regionserver.global.memstore.lowerLimit为0.95
    那么触发阻塞的阈值为:
         16*0.4=6.4
真实案例:hbase_heapsize(Regionserver
占用堆内存大小)配置太小,数据没怎么写入就出现写不进去了。
复制代码

2.5 数据刷写时机三 (WAL的数量大于maxLogs)

WAL的数量大于maxLogs时,也会触发一次刷写,不过不会发生阻塞事件,倒是会警告一下。该参数其实新版本已经不需要进行设置了,最大就是32,也可以更小,根据hbase.regionserver.global.memstore.size来决定:

Math.max(32,(regionserverHeapSize*memstoreSizeRatio*2/logRollSize))
复制代码

2.6 数据刷写时机四(自动刷写间隔)

hbase.regionserver.optionalcacheflushinterval:表示memstore的刷写间隔,默认值是3600000,即1个小时。如果设定为0,则意味着关闭自动刷写。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

法律论证理论

法律论证理论

罗伯特·阿列克西 / 舒国滢 / 中国法制出版社 / 2002-12-01 / 30.00

阿列克西的著作探讨的主要问题是如法律裁决之类的规范性陈述如何以理性的方式证立。阿列克西将规范性陈述的证立过程看作实践商谈或“实践言说”,而将法律裁决的证立过程视为“法律言说” 。由于支持法律规范的法律商谈是普遍实践言说的特定形式,所以法律论证理论应当立基于这种一般理论。 在阿列克西看来,如果裁决是理性言说的结果,那么这一规范性陈述就是真实的或可接受的。其基本观念在于法律裁决证立的合理性取决于......一起来看看 《法律论证理论》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具