
# 修改HBase参数配置对集群进行性能调优
#### 操作场景
创建完CloudTable HBase集群后，由于HBase有很多与读写性能相关的配置参数，读写请求负载不同的情况下，用户可以在表格存储服务控制台中多次修改集群HBase配置参数，对集群的性能进行调优。当修改完集群HBase参数后，用户需要重启集群才能生效。
#### 使用限制
- 修改CloudTable HBase集群参数需要重启集群，可能会导致业务的中断。
- CloudTable HBase集群重启过程中，不允许修改集群参数。
 
#### 前提条件
只有当集群无运行中的任务时，才能修改参数。
#### 操作步骤
1. 登录[表格存储服务控制台](https://console.huaweicloud.com/cloudtable)。
2. 左上角选择区域。
3. 在左侧导航树，单击集群管理。
4. 选中需要修改参数的集群，单击对应的集群名称，跳转到该集群详情页面。
5. 在"参数配置"中单击"参数配置"页签，对HBase参数进行修改。 
   CloudTable集群当前可以修改的HBase参数请参见[HBase参数说明]。
   1. 选中需要修改的参数，在"参数值"列单击![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002342544508.jpg)。
   
   2. 在修改框中输入新值，单击![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002376662329.jpg)，系统提示"参数修改为xx成功，请保存本次修改值"，并且修改的参数值后显示红色\*。
      如果单击![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002342544512.jpg)，则取消修改。
      图1修改HBase参数   
      ![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002376542437.png) 
   
   3. 单击参数列表左上方的"保存修改"，弹出"保存修改"对话框。
   
   4. 在"保存修改"对话框中，确认参数修改信息正确后，勾选"是否立即重启"，然后单击"确定"。
      图2保存修改   
      ![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002342704320.png "点击放大")
      - 当勾选"是否立即重启"并单击"确定"后，集群将立即重启，重启完成后，修改后的参数才能生效。单击参数列表右上方的![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002376662333.png)，参数列表左上方将显示"新值已应用"。
      
      - 在"保存修改"对话框中可以先不勾选"是否立即重启"，单击"确定"后，参数列表上方将显示"新值未应用"。此时用户需要自行重启集群，才能使修改的参数值生效。重启集群操作请参见[重启HBase集群](https://support.huaweicloud.com/usermanual-cloudtable/cloudtable_01_0030.html)。
      
      - 如果修改的参数值不正确，可以在"保存修改"对话框中单击"一键还原"，取消修改参数值。
       
   
   
   
   
6. 参数修改完成后，可以单击"修改历史"页签查看参数修改的历史。 
   在"修改历史"页签中可以查看如下信息：
   - 参数名：被修改过的参数名。
   
   - 旧值：修改前的参数值。
   
   - 新值：修改后的参数值。
   
   - 修改时间：记录用户修改参数值的时间。
   
   
   
   
 
 #### HBase参数说明
CloudTable集群当前可以修改的参数如[表1]所示。
![](https://support.huaweicloud.com/usermanual-cloudtable/public_sys-resources/note_3.0-zh-cn.png)
hbase.regionserver.global.memstore.size和hfile.block.cache.size两个参数值相加不能超过0.8。
 表1HBase参数说明 
| 参数名                                                       | 参数范围                  | 参考缺省值    | 参数描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|:---|
| hbase.regionserver.thread.compaction.small                | \[1,20\]              | 1        | HFile compaction线程数，在put高负载情况下可以适当调大。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| hbase.regionserver.global.memstore.size                   | (0,0.8)               | 0.4      | 建议设置为"hbase.hregion.memstore.flush.size \* 写活跃region数 / RegionServer GC -Xmx"。默认值为"0.4"，表示使用RegionServer GC -Xmx的40%。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| hbase.hstore.blockingStoreFiles                           | \[1,2147483647\]      | 60       | 当列簇的HFile数达到该阈值，阻塞该region的所有操作，直到compaction完成，在put高负载场景下可以适当调大。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| hbase.client.scanner.timeout.period                       | \[1,2147483647\]      | 60000    | 客户端和RegionServer端参数，表示scan租约的时间，建议设置为60000ms的整数倍，在读高负载情况下可以适当调大。单位：毫秒。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| hfile.block.cache.size                                    | (0,0.8)               | 0.2      | 数据缓存所占的RegionServer GC -Xmx百分比，在读高负载情况下可以适当调大以增大缓存命中率以提高性能。默认值为"0.2"，表示使用RegionServer GC -Xmx的20%。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| hbase.regionserver.handler.count                          | \[1,300\]             | 100      | RegionServer上的RPC服务器实例数，建议设置为100 \~ 300之间。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| hbase.regionserver.metahandler.count                      | \[1,100\]             | 50       | RegionServer中处理优先请求的程序实例的数量，建议设置为20 \~ 100之间。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| hbase.hstore.flusher.count                                | \[1,10\]              | 2        | memstore的flush线程数，在put高负载场景下可以适当调大。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| hbase.ipc.server.callqueue.read.ratio                     | \[0,1\]               | 0.5      | 该配置项用于不同负载模型时，控制读和写操作的RPC队列数量的比例。取值范围为0到1.0，默认值为0.5。 - 0表示所有RPC队列不区分读和写操作；  - 小于0.5表示读操作负载少于写操作负载；  - 0.5表示读操作负载与写操作负载相同；  - 大于0.5表示读操作负载大于写操作负载；  - 1.0表示除了一个RPC队列外，其余所有RPC队列都用于读操作。   |
| hbase.regionserver.hotregion.handler.count                | \[1,65535\]           | 66       | 在RegionServer上启动的用于热点Region的RPC侦听器实例数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| hbase.ipc.server.hotregion.max.callqueue.length           | \[1,65535\]           | 330      | RegionServer处理热点Region的请求队列长度最大值，当接收到新的请求时，会检查是否会导致队列长度超过此阈值，如果超过阈值，会直接丢弃此请求。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| hbase.metric.controller.analysis.period                   | \[1,2147483647\]      | 60       | MetricController服务热点分析周期，单位：秒。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| hbase.metric.controller.analysis.threads.max              | \[1,100\]             | 10       | 热点分析任务线程池最大线程数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| hbase.metric.controller.collect.threads.max               | \[1,100\]             | 16       | 热点分析流量收集线程池最大线程数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| hbase.metric.regionserver.hotspot.threshold               | \[1,2147483647\]      | 20000    | 单RegionServer热点阈值，单位为每秒请求数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| hbase.metric.region.hotspot.threshold                     | \[1,2147483647\]      | 10000    | 单Region热点阈值，单位为每秒请求数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| hbase.hotspot.enable                                      | \[true,false\]        | true     | 是否开启热点自愈功能，true为开启，false为关闭。开启后如有出现访问热点，会自动处理热点。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| hbase.tries.cache.enabled                                 | \[true,false\]        | false    | 设置为true时，使用LoudsTriesLruBlockCache缓存索引块和数据块。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| hbase.write.tries                                         | \[true,false\]        | false    | 设置为true时，开启succinct tries特性，它将使用一种新的数据结构来提升index block的利用率。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| hbase.hfile.hsync                                         | \[true,false\]        | false    | 设置是否启用Hfile耐久性以将数据持久化到磁盘。若将该参数设置为true，则性能将受到影响，原因是每个Hfile写入时都会被同步到磁盘上。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| hbase.wal.hsync                                           | \[true,false\]        | false    | 设置是否启用WAL文件耐久性以将WAL数据持久化到磁盘。若将该参数设置为true，则性能将受到影响，原因是每个WAL的编辑都会被同步到磁盘上。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| hbase.hot.cold.data.separator.chore.enabled               | \[true,false\]        | false    | 是否开启CDS功能。设置为true时，将开启冷数据的异步转储。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| hbase.hot.cold.data.separator.chore.interval              | \[60000, 2147483647\] | 86400000 | CDS的检查周期，区别于常规的compaction任务，该检查触发的compaction会将冷热数据写入到不同的数据文件。 单位：毫秒                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| hbase.regionserver.cold.data.shipper.chore.interval       | \[60000, 2147483647\] | 300000   | 配置检查待转储冷数据文件的周期，如果有满足条件的待转储冷数据文件，会触发任务将冷数据文件迁移到冷存储。 单位：毫秒                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| hbase.regionserver.shipper.cold.file.verification.enabled | \[true, false\]       | true     | 是否对迁移到冷存储的数据文件进行一致性校验。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| hbase.cold.data.shipper.thread.count                      | \[1, 20\]             | 3        | 用于将数据文件拷贝到冷存储的线程数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| hbase.cold.data.separator.offpeak.end.hour                | \[-1, 23\]            | -1       | 业务低峰的结束时间，为24小时制的整点。在低峰时间段，CDS会消耗更多的资源来加快数据的热转冷。如果设置为-1表示无业务低峰。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| hbase.cold.data.separator.offpeak.start.hour              | \[-1, 23\]            | -1       | 业务低峰的开始时间点，为24小时制的整点。在低峰时间段，CDS会消耗更多的资源来加快数据的热转冷。如果设置为-1表示无业务低峰。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| hbase.compaction.skip.unnecessary.cold.files.enabled      | \[true, false\]       | false    | 设置major compaction是否跳过冷数据文件。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| hbase.regionserver.thread.compaction.cold                 | \[1, 20\]             | 1        | 用于合并冷数据文件的线程数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| hbase.regionserver.compaction.cold.check.period           | \[60000, 2147483647\] | 30000    | 用于检查冷文件是否需要合并的周期。 单位：毫秒                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   
