
# HBase过载调优
#### 操作场景
当HBase业务突然出现峰值，短时间内大量请求发送到一个RegionServer/HMaster时，超过其可接受的范围，就会造成过载。过载会导致应用侧读写性能下降，HBase服务侧频繁GC，严重时会导致服务实例重启等。
当前HBase具有防过载能力，可以实现拒绝超大请求、保护内部请求、记录不合理请求等功能，减少过载场景下对HBase服务的影响，保障服务稳定性。
#### 约束与限制
该章节仅适用于MRS 3.3.0及之后版本。
#### 流量突增过载场景调优
当业务侧突然出现流量峰值，例如，请求量暴涨10倍等场景，可执行以下操作进行调整：
1. 登录FusionInsight Manager，选择"集群 \> 服务 \> HBase \> 图表"，在左侧图表分类中选择"Handler"，查看"RegionServer处理用户表请求的活跃的handler数-所有实例"是否长时间占满，如果占满需要单击"配置"，调整以下RegionServer参数： 
   表1RegionServer handler占满时参数调优 
   | 参数名称                                              | 参数描述                                               | 调整策略                          |
   |:---|:---|:---|
   | hbase.regionserver.handler.count                  | 在RegionServer上启动的RPC侦听器实例数。                        | 调大此参数值，不建议超过1000。             |
   | hbase.ipc.server.max.default.callqueue.size.ratio | RegionServer队列普通请求最大占比，当队列中普通请求总大小超过此阈值时，会直接丢弃此请求。 | 调整至0.8左右，限制外部请求占用队列比例，保护内部请求。 |
      
   
   
2. 观察应用侧业务运行日志是否存在"XXX is too large for table XXX"或"Client scan caching XXX is too large for table XXX"，如果存在，说明存在不合理请求，请检查对应请求，减小每次请求的数据量（Put/Delete调小批次请求数据量，Scan调小Caching值）；如果业务侧业务暂时无法优化，可以在应用侧的"*客* *户端安装目录* /HBase/hbase/conf/hbase-site.xml"文件中新增或修改以下参数**（仅减少告警日志打印，不会缓解过载）。**
   
   表2减少告警日志打印 
   | 参数名称                                                  | 参数描述                                               | 调整策略          |
   |:---|:---|:---|
   | hbase.rpc.rows.warning.threshold                      | HBase客户端一次写入、更新或删除的数据条数阈值，超过此阈值时会记录日志。             | 增大此参数的值。      |
   | hbase.client.scanner.warning.threshold.scanning.ratio | HBase客户端单个Scan的Caching过大时（默认为最大值的40%），超过此阈值时会记录日志。 | 修改此参数值为"1.0"。 |
      
   
   
3. 当客户业务侧发送过多超大请求会导致服务端处理慢，导致请求积压过载，当**过大请求可以被认为是异常请求** 时，可以在Manager界面的HBase配置中调整RegionServer以下参数拒绝对应请求。
   
   表3请求拒绝相关参数调整 
   | 参数名称                                 | 参数描述                                                  | 调整策略                                                                                                                                             |
   |:---|:---|:---|
   | hbase.ipc.max.request.size           | RegionServer单个请求最大值，当接收到的请求超过此阈值时，会直接丢弃此请求。默认值为256MB。 | 当应用侧多次重试失败，RegionServer侧日志中出现"RPC data length XXX of received from XXX is greater than max allowed"时，建议在应用侧减少一次发送的数据量，如果无法减少，可以调大此参数值，不建议超过1GB。  |
   | hbase.server.keyvalue.maxsize        | RegionServer写入/更新操作单个Cell的最大值，超过此阈值时，将不允许写入。默认值为10MB。 | 单个Cell过大会影响读写性能，同时过大也意味着可能存在异常数据，可以根据写入的数据评估数据范围，设置上限，如果无法评估，建议保持默认值。                                                                            |
   | hbase.rpc.rows.size.threshold.reject | RegionServer单个请求包含的数据操作条数超出阈值时，是否拒绝请求。                | 同一个请求中如果存在一个节点的大量写入、更新、删除操作，即操作数量超过"hbase.rpc.rows.warning.threshold"参数值，会导致热点问题，性能下降。开启此配置可以拒绝不合理请求，当预分区不合理时，此参数可能导致拒绝过多请求，仅建议业务稳定时设置为"true"开启。 |
      
   
   
 
#### 大批量Region上下线过载场景调优
当集群规模较大，Region数过多时，同时重启多个RegionServer，当涉及需要重新上线的Region数过多时（10w+），可能会导致HMaster过载，Region上线慢。
可在Manager界面的HBase配置中调整[表4]中的参数，提升HMaster处理高优先级请求的能力，减少HMaster过载。
 表4大批量Region上下线过载相关参数调优 
| 实例名称                                           | 参数名称                                      | 参数描述                                  | 调整策略                         |
|:---|:---|:---|:---|
| HMaster  | hbase.regionserver.metahandler.count      | HMaster处理高优先级请求的Handler数量。            | 调大此Handler值，不建议超过1000。       |
| HMaster  | hbase.ipc.server.metacallqueue.read.ratio | 高优先级请求队列中读队列的比例，会影响meta读/写Handler的数量。 | 建议保持默认设置，默认值为"0.5"。          |
| RegionServer                                   | hbase.regionserver.msginterval            | RegionServer与HMaster进行消息传输的时间间隔。      | 调大此参数可以减轻HMaster压力，建议设置为15秒。 |
   
