更新时间:2025-07-14 GMT+08:00

Impala启用并配置动态资源池

操作场景

准入控制是Impala的一项功能,它对并发SQL查询施加限制,以避免繁忙集群上的资源使用高峰和内存不足情况。准入控制功能允许设置并发Impala查询数量以及这些查询使用的内存的上限。任何其他查询都会排队直到较早的查询完成,而不是被取消或运行缓慢并导致争用。当其他查询完成时,排队的查询就可以继续进行,当然,也可能是等待超时而返回异常给到客户端。

Impala使用Hadoop的fair-schedule.xml与llama-site.xml来配置实现资源队列与准入控制,可以做到业务资源池与用户的隔离,并控制SQL的并发度。

客户需要使用动态资源池控制impala并发。

添加资源池配置文件

  1. 登录到集群的master1节点上,然后切换到omm用户下,在/home/omm目录下创建fair-scheduler.xml、llama-site.xml文件。

  2. 打开fair-scheduler.xml文件,添加如下配置。

    <allocations>
        <queue name="root">
            <aclSubmitApps> </aclSubmitApps>
            <queue name="default">
                <maxResources>4096 mb, 0 vcores</maxResources><!--参数仅供参考-->
                <aclSubmitApps>*</aclSubmitApps>
            </queue>
            <queue name="development">
                <maxResources>2048 mb, 0 vcores</maxResources><!--参数仅供参考-->
                <aclSubmitApps>admin</aclSubmitApps>
            </queue>
            <queue name="production">
                <maxResources>7168 mb, 0 vcores</maxResources><!--参数仅供参考-->
                <aclSubmitApps>omm</aclSubmitApps>
            </queue>
        </queue>
        <queuePlacementPolicy>
            <rule name="specified" create="false"/>
            <rule name="default" />
        </queuePlacementPolicy>
    </allocations>

  3. 打开llama-site.xml文件,添加如下配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <property>
        <name>llama.am.throttling.maximum.placed.reservations.root.default</name>
        <value>1</value>
      </property>
      <property>
        <name>llama.am.throttling.maximum.queued.reservations.root.default</name>
        <value>2</value><!--参数仅供参考-->
      </property>
      <property>
        <name>impala.admission-control.pool-default-query-options.root.default</name>
        <value>mem_limit=128m,query_timeout_s=20,max_io_buffers=10</value>
      </property>
      <property>
        <name>impala.admission-control.pool-queue-timeout-ms.root.default</name>
        <value>30000</value><!--参数仅供参考-->
      </property>
      <property>
        <name>impala.admission-control.max-query-mem-limit.root.default</name>
        <value>3072000000</value><!--3GB--><!--参数仅供参考-->
      </property>
      <property>
        <name>impala.admission-control.min-query-mem-limit.root.default</name>
        <value>2048000000</value><!--2GB-->
      </property>
      <property>
        <name>impala.admission-control.clamp-mem-limit-query-option.root.default.regularPool</name>
        <value>true</value>
      </property>
    </configuration>

  4. 执行如下命令分别将fair-scheduler.xml、llama-site.xml同步到所有的impalad节点的安装目录的etc文件夹下 。

    scp fair-scheduler.xml {impalad实例ip}:/opt/Bigdata/FusionInsight_Impala_***/***_Impalad/etc/

    scp llama-site.xml {impalad实例ip}:/opt/Bigdata/FusionInsight_Impala_***/***_Impalad/etc/

  5. 登录Manager页面,选择“集群 > 服务 > Impala > 配置 > 全部配置 > Impalad(角色) > 自定义”,在参数“impalad.customized.configs”中添加如下自定义配置项及值:

    表1 自定义配置

    参数

    --fair_scheduler_allocation_path

    /opt/Bigdata/FusionInsight_Impala_***/***_Impalad/etc/fair-scheduler.xml

    --llama_site_path

    /opt/Bigdata/FusionInsight_Impala_***/***_Impalad/etc/llama-site.xml

    图1 自定义配置

  6. 单击“保存”,保存修改的配置。
  7. 单击“实例”,选择“更多 > 重启实例”,重启Impalad实例。

    图2 重启实例

验证资源池配置

  1. 登录到impala客户端所在的节点上,source环境变量,然后执行如下命令。

    impala-shell -i {impalad实例ip:port} -Q request_pool=root.default (fair-scheduler.xml与llama-site.xml文件中配置的资源池)

    执行SQL查询。

  2. 登录到Impalad WebUI上查看资源池使用情况,确认配置已生效。

    https://{集群控制台地址}:9022/component/Impala/Impalad/95/