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

配置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及之后版本。

操作步骤

  1. 修改核心表属性,设置表级别优先级。

    1. 以客户端安装用户登录安装了HBase客户端的节点,并配置环境变量。

      切换至客户端安装目录:

      cd HBase客户端安装目录

      配置环境变量:

      source bigdata_env
    2. 如果集群已启用Kerberos认证(安全模式),需执行以下命令认证用户。
      kinit 组件业务用户
    3. 执行以下命令登录HBase客户端并修改表优先级:

      登录HBase客户端:

      hbase shell

      修改表的优先级:

      alter 'test_table', PRIORITY=>'1'

      其中:

      • 表优先级可以通过PRIORITY属性进行设置,当PRIORITY值大于等于1时,被认为是高优先级表,建议设置为“1”即可。
      • 创建核心表时可以直接指定PRIORITY属性,例如:
        create 'test_table','cf',PRIORITY=>'1'

  2. 登录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数占比超过此阈值时,会直接丢弃低优先级表的请求。该配置用于保障核心业务表请求时延。

  3. 单击“保存”,在保存配置界面单击“确定”保存配置。
  4. 单击“实例”,勾选所有RegionServer实例,选择“更多 > 重启实例”重启RegionServer实例。

配置完成后,可通过以下方式验证过载控制是否生效:

  1. 在HBase Shell中执行describe 'test_table'命令,确认表的PRIORITY属性已设置。
  2. 在Manager的HBase配置页面,确认过载控制参数已正确配置。
  3. 模拟过载场景(如使用压测工具发送大量请求),观察低优先级表的请求是否被丢弃,高优先级表的请求时延是否得到保障。

常见问题

  • 如何确定核心表的优先级设置

    表优先级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的表被视为低优先级表,在过载时可能被丢弃请求。

相关文档

相关文档