HBase过载调优
操作场景
当HBase业务突然出现峰值,短时间内大量请求发送到一个RegionServer/HMaster时,超过其可接受的范围,就会造成过载。过载会导致应用侧读写性能下降,HBase服务侧频繁GC,严重时会导致服务实例重启等。
当前HBase具有防过载能力,可以实现拒绝超大请求、保护内部请求、记录不合理请求等功能,减少过载场景下对HBase服务的影响,保障服务稳定性。
流量突增过载场景调优
当业务侧突然出现流量峰值,例如,请求量暴涨10倍等场景,可执行以下操作进行调整:
- 登录FusionInsight Manager,选择“集群 > 服务 > HBase > 图表”,在左侧图表分类中选择“Handler”,查看“RegionServer处理用户表请求的活跃的handler数-所有实例”是否长时间占满,如果占满需要单击“配置”,调整以下RegionServer参数:
表1 RegionServer handler占满时参数调优 参数名称
参数描述
调整策略
hbase.regionserver.handler.count
在RegionServer上启动的RPC侦听器实例数。
调大此参数值,不建议超过1000。
hbase.ipc.server.max.default.callqueue.size.ratio
RegionServer队列普通请求最大占比,当队列中普通请求总大小超过此阈值时,会直接丢弃此请求。
调整至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”开启。
大批量Region上下线过载场景调优
当集群规模较大,Region数过多时,同时重启多个RegionServer,当涉及需要重新上线的Region数过多时(10w+),可能会导致HMaster过载,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压力,建议设置为15s。 |