HBase最佳实践-内存规划

本文主要出自:http://hbasefly.com/2016/06/18/hbase-practise-ram/

HBase的内存规划分为读缓存BlockCache及写缓存MemStore。
其中读缓存又分为两种模式:LRUBlockCache及BucketCache。
针对两种不同的应用场景(读多写少、写多读少),我们需要使用不同的工作模式。写多读少的场景下,我们推荐使用LRUBlockCache,读多写少的场景下,我们推荐使用BucketCache。

场景一:写多读少型 + LRUBlockCache

LRUBlockCache模式下的内存分布图如下所示,
在这里插入图片描述
图中分配给RegionServer进程的内存就是JVM内存,主要分为三部分:LRUBlockCache,用于读缓存;MemStore,用于写缓存;Other,用于RS运行所必须的其他对象;

内存规划思路
假设系统内存为96G,业务负载为30%读70%写;
(1)RS内存设置多少?
在不影响其他服务情况下越大越好,假如设置为64G,系统内存的2/3。
(2)LRUBlockCache及MemStore设置多少?
HBase在此处有个硬规定:LRUBlockCache + MemStore < 80% * JVM_HEAP,否则RS无法启动。
推荐内存规划:
MemStore = 45% * JVM_HEAP = 64G * 45% = 28.8G ,
LRUBlockCache = 30% * JVM_HEAP = 64G * 30% = 19.2G;
默认情况下Memstore为40% * JVM_HEAP,而LRUBlockCache为25% * JVM_HEAP

配置设置实践
(1)设置JVM参数如下:

-XX:SurvivorRatio=2  -XX:+PrintGCDateStamps  -Xloggc:$HBASE_LOG_DIR/gc-regionserver.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=512M -server -Xmx64g -Xms64g -Xmn2g -Xss256k -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+UseParNewGC -XX:MaxTenuringThreshold=15  -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+CMSClassUnloadingEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -XX:-DisableExplicitGC

(2)hbase-site.xml中MemStore相关参数设置如下:

<property>
    <name>hbase.regionserver.global.memstore.upperLimit</name>
    <value>0.45</value>
</property>
<property>
    <name>hbase.regionserver.global.memstore.lowerLimit</name>
    <value>0.40</value>
</property>

(3)hbase-site.xml中LRUBlockCache相关参数设置如下:

<property>
    <name>hfile.block.cache.size</name>
    <value>0.3</value>
</property>

场景二:读多写少型 + BucketCache

BucketCache模式下的内存分布图如下所示,
在这里插入图片描述
如图,整个RegionServer内存(Java进程内存)分为两部分:JVM内存和堆外内存。其中JVM内存中LRUBlockCache和堆外内存BucketCache一起构成了读缓存CombinedBlockCache,用于缓存读到的Block数据,其中LRUBlockCache用于缓存元数据Block,BucketCache用于缓存实际用户数据Block;MemStore用于写流程,缓存用户写入KeyValue数据;还有部分用于RegionServer正常运行所必须的内存;

内存规划思路
假设系统内存为96G,业务负载为30%写70%读;
(1)RS内存设置多少?
在不影响其他服务情况下越大越好,假如设置为64G,系统内存的2/3。
(2)CombinedBlockCache、LRUBlockCache、BucketCache及MemStore内存设置多少?

内存原理设置值
RS总内存在系统内存允许且不影响其他服务的情况下,越多越好。设置为系统总内存的 2/3。64G
ConbinedBlockCache整个RS内存分为三部分:读缓存、写缓存、其他。基本按照5 : 3 : 2的分配原则。读缓存设置为整个RS内存的50%34G
LRUBlockCacheLRU部分主要缓存数据块元数据,数据量相对较小。设置为整个读缓存的10%3G
BucketCacheBucketCache部分主要缓存用户数据块,数据量相对较大。设置为整个读缓存的90%30G
MemStore整个RS内存分为三部分:读缓存、写缓存、其他。基本按照5 : 3 : 2的分配原则。写缓存设置为整个RS内存的30%20G
JVM_HEAPRS总内存大小 – 堆外内存大小30G

配置设置实践
(1)设置JVM参数如下:

-XX:SurvivorRatio=2  -XX:+PrintGCDateStamps  -Xloggc:$HBASE_LOG_DIR/gc-regionserver.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=512M -server -Xmx40g -Xms40g -Xmn1g -Xss256k -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+UseParNewGC -XX:MaxTenuringThreshold=15  -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+CMSClassUnloadingEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -XX:-DisableExplicitGC

(2)hbase-site.xml中MemStore相关参数设置如下:

<property>
    <name>hbase.regionserver.global.memstore.upperLimit</name>
    <value>0.66</value>
</property>
<property>
    <name>hbase.regionserver.global.memstore.lowerLimit</name>
    <value>0.60</value>
</property>

(3)hbase-site.xml中CombinedBlockCache相关参数设置如下:

<property>
    <name>hbase.bucketcache.ioengine</name>
    <value>offheap</value>
</property>
<property>
    <name>hbase.bucketcache.size</name>
    <value>34816</value>
</property>
<property>
    <name>hbase.bucketcache.percentage.in.combinedcache</name>
    <value>0.90</value>
</property>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值