活了二十多年,没能为祖国、为人民做点什么,每思及此,伤心欲绝 !

hbase2.0.3 内存规划

大数据 柯广 3758℃ 0评论

读多写少

由于业务场景的需要,我们hbase偏读多写少的,虽然hbase读的速度会慢于写的速度。搭建hbase集群,需要做一些基础的配置,尽量让hbase能有一个不错的表现,其中内存规划工作占了很大的比例。

机器64G内存

序号 步骤 原理 计算公式 计算值 修正值
A 规划RS总内存 在系统内存允许且不影响其他服务的情况下,越多越好。64G内存,预留8G即可 64G - 8G 56G 56G
B 规划读缓存 CombinedBlockCache 整个RS内存分为三部分:读缓存、写缓存、其他。基本按照5 : 4 : 1的分配原则。读缓存设置为整个RS内存的50% A(56G) * 50% 28G 28G
B1 规划读缓存LRU部分 LRU部分主要缓存数据块元数据,数据量相对较小。设置为整个读缓存的10% B(28G)*10% 2.8G 3G
B2 规划读缓存BucketCache部分 BucketCache部分主要缓存用户数据块,数据量相对较大。设置为整个读缓存的90% B(28G)*90% 25.2G 24G
C 规划写缓存MemStore 整个RS内存分为三部分:读缓存、写缓存、其他。基本按照5:4:1的分配原则。写缓存设置为整个RS内存的40% A(56G) * 40% 22.4G 22G
D 设置JVM_HEAP RS总内存大小 减去 堆外内存大小 A – B2 30.8G 32G

注意

LRUBlockCache + MemStore < 80% * JVM_HEAP

hbase配置

-Xmx32g -Xms32g -Xmn1g -Xss256k -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC 
-XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection  -XX:+UseCMSInitiatingOccupancyOnly        
-XX:CMSInitiatingOccupancyFraction=75 -XX:-DisableExplicitGC

<property>
    <name>hbase.regionserver.global.memstore.upperLimit</name>
    <value>0.60</value>
</property>
<property>
    <name>hbase.regionserver.global.memstore.lowerLimit</name>
    <value>0.55</value>
</property>
<property>
    <name>hfile.block.cache.size</name>
    <value>0.19</value>
</property>
<property>
    <name>hbase.bucketcache.ioengine</name>
    <value>offheap</value>
</property>
<property>
    <name>hbase.bucketcache.size</name>
    <value>24576</value>
</property>
<property>
    <name>hbase.bucketcache.percentage.in.combinedcache</name>
    <value>0.90</value>
</property>

参考文档:

https://blog.csdn.net/javastart/article/details/52612447

https://blog.csdn.net/cm_chenmin/article/details/52994980

https://sq.163yun.com/blog/article/170965000956645376

机器96G内存

我们线上是96G的机器,内存规划如下。

序号 步骤 原理 计算公式 计算值 修正值
A 规划RS总内存 在系统内存允许且不影响其他服务的情况下,越多越好。96G内存,预留8G即可 96G - 8G 88G 88G
B 规划读缓存 CombinedBlockCache 整个RS内存分为三部分:读缓存、写缓存、其他。基本按照5 : 4 : 1的分配原则。读缓存设置为整个RS内存的50% A(88G) * 50% 44G 44G