更新时间:2026-10-28 GMT+08:00
分享

HBase过载调优

操作场景

当HBase业务突然出现峰值,短时间内大量请求发送到一个RegionServer/HMaster时,超过其可接受的范围,就会造成过载。过载会导致应用侧读写性能下降,HBase服务侧频繁GC,严重时会导致服务实例重启等。

当前HBase具有防过载能力,可以实现拒绝超大请求、保护内部请求、记录不合理请求等功能,减少过载场景下对HBase服务的影响,保障服务稳定性。

该章节针对流量突增过载和大批量Region上下线过载两类场景,指导您通过调整HBase服务端和客户端参数进行调优。

约束与限制

该章节仅适用于MRS 3.3.0及之后版本。

流量突增过载场景调优

当业务侧突然出现流量峰值,例如,请求量暴涨10倍等场景,可执行以下操作进行调整:

  1. 登录MRS集群Manager页面。

    登录集群Manager具体操作,请参考访问MRS集群Manager。

  2. 选择“集群 > 服务 > HBase > 图表”,在左侧图表分类中选择“Handler”,查看“RegionServer处理用户表请求的活跃的handler数-所有实例”是否长时间占满。
  3. 如果占满,请选择“集群 > 服务 > HBase > 配置 > 全部配置”,调整“HBase->RegionServer”的以下参数:

    表1 RegionServer handler占满时参数调优

    参数名称

    参数描述

    调整策略

    hbase.regionserver.handler.count

    在RegionServer上启动的RPC侦听器实例数。

    • Master使用相同的属性来统计handler个数。如果handler数量设置过高,可能反而会导致性能下降。
    • 取值范围:1~2147483647

    调大此参数值,不建议超过1000。

    hbase.ipc.server.max.default.callqueue.size.ratio

    RegionServer队列普通请求最大占比,当队列中普通请求总大小超过此阈值时,会直接丢弃此请求。

    • 此配置用于保护HBase内部请求,保证服务稳定性。
    • 默认值为“0.0”,表示不开启保护。
    • 当用户请求存在不确定峰值的情况下建议开启,可以设置值为“0.8”左右。
    • 取值范围:0.0~1.0

    调整至0.8左右,限制外部请求占用队列比例,保护内部请求。

  4. 观察应用侧业务运行日志是否存在“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”。

  5. 当用户业务侧发送过多超大请求会导致服务端处理慢,导致请求积压过载,当过大请求可以被认为是异常请求时,可以在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”开启。

  6. 配置完成后,在Manager界面查看集群是否存在配置过期的实例,如果存在,需重启配置过期的实例使配置生效。

大批量Region上下线过载场景调优

当集群规模较大,Region数过多时,可能存在需要同时重启多个RegionServer的场景,当需要重新上线的Region数过多时(10w+),可能会导致HMaster过载,Region上线慢。

可以参考以下操作在Manager界面的HBase配置中调整对应参数,提升HMaster处理高优先级请求的能力,减少HMaster过载。

  1. 登录MRS集群Manager页面。

    登录集群Manager具体操作,请参考访问MRS集群Manager。

  2. 选择“集群 > 服务 > HBase > 配置 > 全部配置”,调整以下参数。

    表4 大批量Region上下线过载相关参数调优

    实例名称

    参数名称

    参数描述

    调整策略

    HMaster

    hbase.regionserver.metahandler.count

    HMaster处理高优先级请求的Handler数量。

    调大此Handler值,不建议超过1000。

    hbase.ipc.server.metacallqueue.read.ratio

    高优先级请求队列中读队列的比例,会影响meta读/写Handler的数量。

    建议保持默认设置,默认值为“0.5”。

    RegionServer

    hbase.regionserver.msginterval

    RegionServer与HMaster进行消息传输的时间间隔。

    调大此参数可以减轻HMaster压力,建议设置为15秒。

  3. 保存配置,重启配置过期的实例使配置生效。

相关文档

相关文档