1. 基础知识
1.1 Region Server内存布局
参考[2]
1.2 堆内内存
- 物理内存少于20G,建议只配置堆内内存
- 配置参数:
hbase-env.sh
的参数HBASE_HEAPSIZE
,默认1G - 为
on-heap BlockCache
的实现,称之为LruBlockCache
,也称L1 Cache
- 默认开启,可在表的列族级关闭,
desc 'table'
查看BLOCKCACHE => 'false'
- 设置
hbase.block.data.cachecompressed
为true
可开启BlockCache压缩。性能影响HBASE-11331:吞吐率增加50%,延迟增加30%,gc增加80%,CPU负载增加2%。
1.3 堆外内存
- 物理内存大于20G,建议配置堆外内存
off-heap BlockCache
称为BucketCache
,也称L2 Cache
- 堆外内存总大小由
-XX:MaxDirectMemorySize=20G
参数配置,或者hbase-env.sh
的参数HBASE_OFFHEAPSIZE
hbase.bucketcache.size
配置BucketCache
的占堆外内存比例(若<1.0
)或大小(>=1
,单位MB
)hbase.bucketcache.ioengine
设置为offheap
开启BucketCache
BucketCache
只保存数据块(DATA
),元数据块(INDEX BLOOM
)仍然保存在LruBlockCache
BucketCache
可通过设置hbase.bucketcache.combinedcache.enabled
为false
(默认true
)作为LruBlockCache L1 Cache
的纯L2 Cache
,L1中替换的Block保存到L2,查询时先查询L1,L1未命中再查询L2。HBase 2.0开始移除了该特性。
1.4 读写比例
hfile.block.cache.size
配置读内存BlockCache
占堆内内存比例, 默认0.4
,不建议配置为0,至少保证足够空间用于StoreFile索引hbase.regionserver.global.memstore.size
(新配置,默认为空),hbase.regionserver.global.memstore.upperLimit
(旧配置,默认0.4)配置写内存Memstore
占比- 读写总比例必需
<= 0.8
内存配置思路
Hortonworks的参考资料[1][2]给出了详细且简单明了的配置建议。[3]在实践的基础上作了进一步的补充。
以[2]的示例说明,75%读25%写,因此LruBlockCache比例为0.8*75%=0.6
,MemStore的比例0.8-06=0.2
参数配置如下:
#on-heap memory
HBASE_HEAPSIZE=20G
# 读写比例
hfile.block.cache.size=0.6
hbase.regionserver.global.memstore.size=0.2
# off-heap memory
hbase.bucketcache.ioengine=offheap
-XX:MaxDirectMemorySize=108G
# BucketCache大小。
# 个人认为[2]设置有误,其设置为BucketCache+LruBlockCache = 106G + 12G = 118G,已超出了堆外内存大小
hbase.bucketcache.size=108544
参考资料
来源:CSDN
作者:lzshlzsh
链接:https://blog.csdn.net/lzshlzsh/article/details/103905852