大数据技术-HBase:MSLAB介绍

随着内存资源价格的降低,服务器的内存越来越大,很多都是达到96GB的。而HBase的RS又是内存耗用性的,很多时候我们为其分配了比较大的内存空间。但与此同时,很多人都会遇到配置大内存所导致的各种问题。

首先,我们知道HBase工作依赖于Zookeeper,RS会定期向Master进行状态汇报,如果长时间没有收到RS的汇报信息,Master会认为RS已经死掉,然后开始进行恢复操作。而Zookeeper与RS的会话也可能因为STW的GC导致会话超时,自己便会退出。

其次,很大堆内存一旦触发full gc,除了可能导致长时间的停顿,客户端感觉到明显的延迟甚至timeout,另外一个比较严重的是随着时间推移,堆内存中存在大量内存碎片,带来的结果是虽然还有很多空余内存,但很多是比较小无法分配使用的,promotion failure。

生产环境一般新生代使用ParNew, 老年代用CMS,触发尽量别配置太大比例,否则容易产生晋升失败。

HBase提供了以下几个参数便于利用上一种机制,防止堆中产生过多碎片,大概思路也是参考TLAB,叫做MSLAB,MemStore-Local Allocation Buffer,为memstore划分相应的区块MemStoreLAB,里面一个字节数组固定的大小(curChunk),用于存放KeyValue的具体数值,还有一个变量用于记录目前空余空间偏移指针,当一个Chunk被填满,重新开辟一个字节数组空间。有效减少了因为内存碎片导致的full gc。


MSLAB,全称是 MemStore-Local Allocation Buffer,是Cloudera在HBase 0.90.1时提交的一个patch里包含的特性。它基于Arena Allocation解决了HBase因Region flush导致的内存碎片问题。
MSLAB的实现原理(对照Arena Allocation,HBase实现细节):
MemstoreLAB为Memstore提供Allocator。
创建一个2M(默认)的Chunk数组和一个chunk偏移量,默认值为0。
当Memstore有新的KeyValue被插入时,通过KeyValu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值