配置HBase表级别过载控制
操作场景
在HBase集群运维中,当短时间内请求数量突增时,RegionServer的请求队列会迅速积压,导致过载问题。过载时所有表的请求时延都会增大,P99时延显著上升,对于时延敏感的核心业务影响严重。如何在过载场景下优先保障核心业务表的请求时延?HBase表级别过载保护功能通过为表设置优先级,在过载时自动丢弃低优先级表的请求,确保高优先级(核心业务)表的请求能够及时处理,有效保障核心业务的时延要求。本文介绍如何配置HBase表级别过载控制。
- 表优先级(PRIORITY):HBase表的优先级属性,用于标识表的重要程度。PRIORITY值大于等于1时,被认为是高优先级表。在过载场景下,高优先级表的请求会被优先处理,低优先级表的请求可能被丢弃。
- RegionServer队列过载:RegionServer接收到的请求在队列中等待处理,当队列中请求总大小占比超过阈值时,认为队列过载。此时RegionServer会根据表优先级策略处理请求。
- RegionServer handler过载:RegionServer使用handler线程处理请求,当活跃handler数占比超过阈值时,认为handler过载。此时RegionServer会根据表优先级策略处理请求。
- 过载控制:HBase提供的过载保护机制,当检测到队列或handler过载时,自动丢弃低优先级表的请求,保障高优先级表的请求时延。
约束与限制
本章节内容仅适用于MRS 3.3.1及之后版本。
操作步骤
- 修改核心表属性,设置表级别优先级。
- 以客户端安装用户登录安装了HBase客户端的节点,并配置环境变量。
cd HBase客户端安装目录
配置环境变量:
source bigdata_env
- 如果集群已启用Kerberos认证(安全模式),需执行以下命令认证用户。
kinit 组件业务用户
- 执行以下命令登录HBase客户端并修改表优先级:
hbase shell
修改表的优先级:
alter 'test_table', PRIORITY=>'1'
其中:
- 表优先级可以通过PRIORITY属性进行设置,当PRIORITY值大于等于1时,被认为是高优先级表,建议设置为“1”即可。
- 创建核心表时可以直接指定PRIORITY属性,例如:
create 'test_table','cf',PRIORITY=>'1'
- 以客户端安装用户登录安装了HBase客户端的节点,并配置环境变量。
- 登录FusionInsight Manager界面,选择“集群 > 服务 > HBase > 配置 > 全部配置”,在搜索框中搜索表1中的参数,并修改对应参数值。
登录集群Manager具体操作,请参考访问MRS集群Manager。
表1 HBase表级别过载控制参数 参数名称
参数说明
参数修改建议
hbase.ipc.server.default.callqueue.size.overload.threshold
RegionServer队列过载阈值,当队列中请求总大小占比超过此阈值时,会直接丢弃低优先级表的请求。该配置用于保障核心业务表请求时延。
当开启队列普通请求限制(保护内部高优先级请求)功能时,即“hbase.ipc.server.max.default.callqueue.size.ratio”参数值不为0,队列过载阈值会受到普通请求队列最大占比限制,最终生效值为两者的乘积。
- 需要综合考虑核心表业务请求量以及时延要求,核心表时延要求越高/请求越多,建议设置越小的值,通常可设置为:0.5~1.0。
- 可根据实际业务需求单独或同时开启两种过载控制,RegionServer队列过载控制适用于存在大请求过载的场景,RegionServer handler过载控制适用于高并发过载的场景。
hbase.ipc.server.handler.overload.threshold
RegionServer handler过载阈值,当活跃handler数占比超过此阈值时,会直接丢弃低优先级表的请求。该配置用于保障核心业务表请求时延。
- 单击“保存”,在保存配置界面单击“确定”保存配置。
- 单击“实例”,勾选所有RegionServer实例,选择“更多 > 重启实例”重启RegionServer实例。
配置完成后,可通过以下方式验证过载控制是否生效:
- 在HBase Shell中执行describe 'test_table'命令,确认表的PRIORITY属性已设置。
- 在Manager的HBase配置页面,确认过载控制参数已正确配置。
- 模拟过载场景(如使用压测工具发送大量请求),观察低优先级表的请求是否被丢弃,高优先级表的请求时延是否得到保障。
常见问题
- 如何确定核心表的优先级设置
表优先级PRIORITY值决定了在过载场景下的处理顺序,需要合理设置以确保核心业务得到保障。
建议将核心业务表的PRIORITY设置为1,非核心表不设置PRIORITY或设置为大于1的值。如果存在多个优先级层次,可以设置不同的PRIORITY值(如1、2、3),值越小优先级越高。
- 过载控制参数如何设置
过载阈值参数需要根据业务特点设置,设置过小可能导致正常请求被丢弃,设置过大则无法有效保护核心业务。
建议根据以下步骤设置参数:- 评估核心表的业务请求量和时延要求。
- 对于存在大请求过载的场景,优先配置队列过载阈值(hbase.ipc.server.default.callqueue.size.overload.threshold),建议设置为0.5~1.0。
- 对于高并发过载的场景,优先配置handler过载阈值(hbase.ipc.server.handler.overload.threshold),建议设置为0.5~1.0。
- 可根据业务需求同时开启两种过载控制。
- 过载控制是否会影响所有表
过载控制仅对低优先级表生效,高优先级表(PRIORITY>=1)的请求不会被丢弃。
请确保核心业务表已设置PRIORITY属性。未设置PRIORITY或PRIORITY值小于1的表被视为低优先级表,在过载时可能被丢弃请求。