
# 提升HBase Put和Scan性能综合调优
#### 操作场景
HBase有很多与读写性能相关的配置参数。读写请求负载不同的情况下，配置参数需要进行相应的调整，本章节旨在指导用户通过修改RegionServer配置参数进行读写性能调优。
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
本章节适用于MRS 3.x及之后版本。
#### 操作步骤
登录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"。
    ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
    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请求阻塞。
  
  
   表1Put相关参数 
  | **参数**                                     | **描述**                                                                                                                                                               | **默认值**   |
  |:---|:---|:---|
  | hbase.wal.hsync                            | 每一条wal是否持久化到硬盘。 参考[提升HBase连续Put数据场景性能](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_1637.html)。            | true      |
  | hbase.hfile.hsync                          | hfile写是否立即持久化到硬盘。 参考[提升HBase连续Put数据场景性能](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_1637.html)。          | 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相关参数
   表2Scan相关参数 
  | **参数**                              | **描述**                                                                                                           | **默认值**                                   |
  |:---|:---|:---|
  | 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相关参数
  表3Handler相关参数 
  | **参数**                               | **描述**                                         | **默认值** |
  |:---|:---|:---|
  | hbase.regionserver.handler.count     | RegionServer上的RPC侦听器实例数，建议设置为200 \~ 400之间。     | 200     |
  | hbase.regionserver.metahandler.count | RegionServer中处理优先请求的程序实例的数量，建议设置为200 \~ 400之间。 | 200     |
     
  
 
