随着集群数据量和负载的提升,默认配置可能无法满足业务的性能需求。根据具体的业务场景,合理调整HBase的内存配置,有助于提升HBase的性能表现。本文将为您介绍常用的HBase内存调优方式。
JVM相关的配置参数说明。
配置参数 | 参数作用 |
---|---|
HBASE_OPTS | 该参数作用于HBase的所有角色。 |
HBASE_MASTER_OPTS | 该参数作用于HBase的Master。 |
HBASE_REGIONSERVER_OPTS | 该参数作用于HBase的RegionServer。 |
HBase的性能主要依赖RegionServer,所以本文关注HBASE_REGIONSERVER_OPTS
中的内存配置:
JVM参数 | 参数含义 |
---|---|
-Xmx | 最大堆大小 |
-Xms | 初始堆大小 |
-XX:MaxDirectMemorySize | 最大堆外内存大小 |
为提升性能,可以根据业务使用情况,适当调大以上内存配置,或将更多的堆内存分配到堆外内存,同时配置BlockCache和MemStore等的堆外内存实现。
注意
HBase依赖内存实现低延迟的读写访问。但随之而来的则是JVM GC的压力,轻则请求变慢,重则服务宕机,影响业务稳定性。为了缓解GC压力,降低 RPC的P99/P999 长尾延迟,HBase 2.x支持在读取和写入路径上使用堆外内存。
在读链路中,HBase使用BlockCache缓存从HDFS读取的数据,来降低读延迟。
BlockCache 默认只使用堆内存缓存所有数据,集群负载高时会有较大的GC压力。推荐使用CombinedBlockCache,它有两层缓存,L1是由 LruBlockCache 实现的堆上缓存,用于缓存元数据块(INDEX和BLOOM);L2是 BucketCache,用于缓存数据块(DATA),可以选择使用堆外内存或文件的实现。
参数 | 说明 | 默认值 |
---|---|---|
| 分配给LruBlockCache的最大堆内存百分比(-Xmx)。 | 0.4 |
| BucketCache提供3种模式:
| 默认为空,不启用BucketCache |
| 表示BucketCache的容量。 | 0 |
默认情况下,HBase 中的 MemStore 使用 MSLAB 创建固定大小的chunk来存储写入的Cell,并将这些chunk池化,以此来避免内存碎片,降低GC压力。从 HBase2.x 开始,MSLAB 池默认开启,也支持使用堆外内存作为MemStore。
参数 | 说明 | 默认值 |
---|---|---|
| 当使用堆内存做MemStore,MemStore占最大堆内存百分比(-Xmx)。 | 0.4 |
| 该配置默认为0,当配置大于0时,则启用堆外内存做MemStore。 | 0 |
| 是否开启MSLAB。 | true |
| MSLAB的chunk大小。默认为2MB。 | 20997152 |
| 启动时准备多大比例的内存给MemStore。写压力不大时,不建议设置该值,会导致内存利用率低,频繁Full GC。 | 0 |