You need to enable JavaScript to run this app.
导航
HBase内存调优
最近更新时间:2024.11.11 17:08:13首次发布时间:2024.11.11 17:08:13

随着集群数据量和负载的提升,默认配置可能无法满足业务的性能需求。根据具体的业务场景,合理调整HBase的内存配置,有助于提升HBase的性能表现。本文将为您介绍常用的HBase内存调优方式。

JVM参数

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内存时,也要注意节点内存规格和其他服务的内存使用情况。若服务总内存配置超过节点内存,则可能触发操作系统的oom-killer,导致服务宕机。
  • HBase有多个功能可以使用堆外内存,要保证MaxDirectMemorySize配置大于所有堆外内存配置之和,否则服务有宕机风险。

HBase参数

HBase依赖内存实现低延迟的读写访问。但随之而来的则是JVM GC的压力,轻则请求变慢,重则服务宕机,影响业务稳定性。为了缓解GC压力,降低 RPC的P99/P999 长尾延迟,HBase 2.x支持在读取和写入路径上使用堆外内存。

配置BlockCache

在读链路中,HBase使用BlockCache缓存从HDFS读取的数据,来降低读延迟。
BlockCache 默认只使用堆内存缓存所有数据,集群负载高时会有较大的GC压力。推荐使用CombinedBlockCache,它有两层缓存,L1是由 LruBlockCache 实现的堆上缓存,用于缓存元数据块(INDEX和BLOOM);L2是 BucketCache,用于缓存数据块(DATA),可以选择使用堆外内存或文件的实现。

参数

说明

默认值

hfile.block.cache.size

分配给LruBlockCache的最大堆内存百分比(-Xmx)。
如未启用CombinedBlockCache,则这就是全部的BlockCache容量;如启用了CombinedBlockCache,则这就是L1的缓存容量。

0.4

hbase.bucketcache.ioengine

BucketCache提供3种模式:

  • offheap: 表示使用堆外内存做L2缓存。
  • file:表示使用文件做L2缓存。单个文件例如file:PATH_TO_FILE;多个文件例如files:PATH_TO_FILE1,PATH_TO_FILE2,PATH_TO_FILE3
  • mmap:表示使用mmapped文件做L2缓存。配置方式:mmap:PATH_TO_FILE

默认为空,不启用BucketCache

hbase.bucketcache.size

表示BucketCache的容量。
当同时配置hbase.bucketcache.ioenginehbase.bucketcache.size时,启用CombinedBlockCache实现。
单位:MB。

0

配置MemStore

默认情况下,HBase 中的 MemStore 使用 MSLAB 创建固定大小的chunk来存储写入的Cell,并将这些chunk池化,以此来避免内存碎片,降低GC压力。从 HBase2.x 开始,MSLAB 池默认开启,也支持使用堆外内存作为MemStore。

参数

说明

默认值

hbase.regionserver.global.memstore.size

当使用堆内存做MemStore,MemStore占最大堆内存百分比(-Xmx)。

0.4

hbase.regionserver.offheap.global.memstore.size

该配置默认为0,当配置大于0时,则启用堆外内存做MemStore。
该值表示MemStore使用堆外内存容量。
单位:MB

0

hbase.hregion.memstore.mslab.enabled

是否开启MSLAB。

true

hbase.hregion.memstore.mslab.chunksize

MSLAB的chunk大小。默认为2MB。
单位:B

20997152

hbase.hregion.memstore.chunkpool.initialsize

启动时准备多大比例的内存给MemStore。写压力不大时,不建议设置该值,会导致内存利用率低,频繁Full GC。

0