更新时间:2024-09-18 GMT+08:00

提升HBase Put和Scan数据性能

操作场景

HBase有很多与读写性能相关的配置参数。读写请求负载不同的情况下,配置参数需要进行相应的调整,本章节旨在指导用户通过修改RegionServer配置参数进行读写性能调优。

操作步骤

登录FusionInsight Manager界面,选择“集群 > 服务 > HBase > 配置”,配置以下相关参数以提升HBase数据读写性能调优。

  • JVM GC参数

    RegionServer “GC_OPTS”参数设置建议:

    • “-Xms”与“-Xmx”设置相同的值,需要根据实际情况设置,增大内存可以提高读写性能,可以参考参数“hfile.block.cache.size”(见表2)和参数“hbase.regionserver.global.memstore.size”(见表1)的介绍进行设置。
    • “-XX:NewSize”与“-XX:MaxNewSize”设置相同值,建议低负载场景下设置为“512M”,高负载场景下设置为“2048M”
    • “-XX:CMSInitiatingOccupancyFraction”建议设置为“100 * (hfile.block.cache.size + hbase.regionserver.global.memstore.size + 0.05)”,最大值不超过“90”。
    • “-XX:MaxDirectMemorySize”表示JVM使用的堆外内存,建议低负载情况下设置为“512M”,高负载情况下设置为“2048M”

      “GC_OPTS”参数中“-XX:MaxDirectMemorySize”默认没有配置,如需配置,用户可在“GC_OPTS”参数中自定义添加。

  • Put相关参数

    RegionServer处理Put请求的数据,会将数据写入MemStore和HLog:

    • 当MemStore大小达到设置的“hbase.hregion.memstore.flush.size”参数值大小时,MemStore就会刷新到HDFS生成HFile。
    • 当当前Region的列簇的HFile数量达到“hbase.hstore.compaction.min”参数值时会触发compaction操作。
    • 当当前Region的列簇HFile数达到“hbase.hstore.blockingStoreFiles”参数值时会阻塞MemStore刷新生成HFile的操作,导致Put请求阻塞。
    表1 Put相关参数

    参数

    描述

    默认值

    hbase.wal.hsync

    每一条WAL是否持久化到硬盘。

    参考提升HBase连续Put数据场景性能

    true

    hbase.hfile.hsync

    HFile写数据是否立即持久化到硬盘。

    参考提升HBase连续Put数据场景性能

    true

    hbase.hregion.memstore.flush.size

    如果MemStore的大小(单位:Byte)超过指定值,MemStore将被冲洗至磁盘。该参数值将被运行每个“hbase.server.thread.wakefrequency”的线程所检验。建议设置为HDFS块大小的整数倍,在内存足够Put负载大情况下可以调整增大该值。

    134217728

    hbase.regionserver.global.memstore.size

    更新被锁定以及强制冲洗发生之前一个RegionServer上支持的所有MemStore的大小。建议设置为“hbase.hregion.memstore.flush.size * 写活跃region数 / RegionServer GC -Xmx”。默认值为“0.4”,表示使用RegionServer GC -Xmx的40%。

    0.4

    hbase.hstore.flusher.count

    MemStore的flush线程数,在Put高负载场景下可以适当调大。

    2

    hbase.regionserver.thread.compaction.small

    小压缩线程数,在Put高负载情况下可以适当调大。

    10

    hbase.hstore.blockingStoreFiles

    如果一个Store内的HStoreFile文件数量超过指定值,则针对此HRegion的更新将被锁定直到一个压缩完成或者“base.hstore.blockingWaitTime”被超过。每冲洗一次MemStore一个StoreFile文件被写入。在Put高负载场景下可以适当调大。

    15

  • Scan相关参数
    表2 Scan相关参数

    参数

    描述

    默认值

    hbase.client.scanner.timeout.period

    客户端和RegionServer服务端参数,表示客户端执行scan的租约超时时间。建议设置为60000ms的整数倍,在读高负载情况下可以适当调大。单位:毫秒。

    60000

    hfile.block.cache.size

    数据缓存所占的RegionServer GC -Xmx百分比,在读高负载情况下可以适当调大以增大缓存命中率以提高性能。表示分配给HFile/StoreFile所使用的块缓存的最大heap(-Xmx setting)的百分比。

    当offheap关闭时,默认值为“0.25”,当offheap开启时,默认值是“0.1”。

  • Handler相关参数
    表3 Handler相关参数

    参数

    描述

    默认值

    hbase.regionserver.handler.count

    RegionServer上的RPC侦听器实例数,建议设置为200 ~ 400之间。

    200

    hbase.regionserver.metahandler.count

    RegionServer中处理优先请求的程序实例的数量,建议设置为200 ~ 400之间。

    200