HBase过载调优
操作场景
当HBase业务突然出现峰值,短时间内大量请求发送到一个RegionServer/HMaster时,超过其可接受的范围,就会造成过载。过载会导致应用侧读写性能下降,HBase服务侧频繁GC,严重时会导致服务实例重启等。
当前HBase具有防过载能力,可以实现拒绝超大请求、保护内部请求、记录不合理请求等功能,减少过载场景下对HBase服务的影响,保障服务稳定性。
该章节针对流量突增过载和大批量Region上下线过载两类场景,指导您通过调整HBase服务端和客户端参数进行调优。
约束与限制
该章节仅适用于MRS 3.3.0及之后版本。
流量突增过载场景调优
当业务侧突然出现流量峰值,例如,请求量暴涨10倍等场景,可执行以下操作进行调整:
- 登录MRS集群Manager页面。
登录集群Manager具体操作,请参考访问MRS集群Manager。
- 选择“集群 > 服务 > HBase > 图表”,在左侧图表分类中选择“Handler”,查看“RegionServer处理用户表请求的活跃的handler数-所有实例”是否长时间占满。
- 如果占满,请选择“集群 > 服务 > 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左右,限制外部请求占用队列比例,保护内部请求。
- 观察应用侧业务运行日志是否存在“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”。
- 当用户业务侧发送过多超大请求会导致服务端处理慢,导致请求积压过载,当过大请求可以被认为是异常请求时,可以在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”开启。
- 配置完成后,在Manager界面查看集群是否存在配置过期的实例,如果存在,需重启配置过期的实例使配置生效。
大批量Region上下线过载场景调优
当集群规模较大,Region数过多时,可能存在需要同时重启多个RegionServer的场景,当需要重新上线的Region数过多时(10w+),可能会导致HMaster过载,Region上线慢。
可以参考以下操作在Manager界面的HBase配置中调整对应参数,提升HMaster处理高优先级请求的能力,减少HMaster过载。
- 登录MRS集群Manager页面。
登录集群Manager具体操作,请参考访问MRS集群Manager。
- 选择“集群 > 服务 > 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秒。
- 保存配置,重启配置过期的实例使配置生效。