计算资源-Quota使用

更新时间:
复制为 MD 格式

配额组(Quota)是MaxCompute的计算资源池,提供计算作业所需的计算资源(CPU和内存)。MaxCompute支持根据计算作业对计算资源的需求,指定匹配的Quota,助力高效使用计算资源。本文介绍如何使用MaxComputeQuota。

背景信息

MaxCompute的计算资源配额组支持使用方式如下。

  • 通过Project关联默认计算Quota,实现Project提交的作业使用此Quota进行计算。

  • 作业级别指定使用计算Quota(use quota),通过此功能可以支持将一个Project里的作业指定到不同的Quota进行计算,包括指定包年包月、按量计费的Quota。作业级别指定的Quota优先级大于Project默认的Quota。

  • 通过对Quota配置规则条件,实现满足规则条件的作业可调度到对应Quota。

配额组(Quota)使用逻辑图如下所示。image

Project设置默认Quota

Project设置默认计算Quota ,即此Project发起的作业默认会使用默认Quota的资源进行计算,无需其他设置。新建项目时可以直接选择关联默认Quota,也可以通过控制台项目管理对项目进行默认Quota切换,详情请参见项目管理

作业级别指定Quota

作业级别指定Quota主要是在作业前面通过命令进行指定,此功能会校验作业所有者是否有该Quota的使用权限,具体操作步骤如下。

  1. 新建Quota

    使用新版控制台新建Quota请参见配置Quota

    说明

    Quota名称建议使用英文字母和数字的组合。已经存在的中文Quota名称可继续使用。

  2. 授权

    当前针对作业级别指定Quota功能的鉴权默认为所有账号(包括阿里云账号)及角色都没有权限,需要单独授权。

    1. 新增角色

      1. 登录MaxCompute控制台,在左上角选择地域。

      2. 在左侧导航栏,选择管理配置 > 租户管理 。

      3. 租户管理页面,单击角色管理页签。

      4. 角色管理页签,单击新增角色,在弹出的新增角色对话框,填写自定义角色名称policy内容,然后单击确定完成创建。

        {
            "Statement": [{
                    "Action": [
                        "odps:List",
                        "odps:Usage"],
                    "Effect": "Allow",
                    "Resource": ["acs:odps:*:regions/*/quotas/*"]}],
            "Version": "1"
        }
    2. 将角色授权给需要进行作业级别指定Quota的账号

      主账号或拥有Super_Administrator权限的子账号可进行授权操作。

      根据授权对象不同,有如下两种场景:

      对阿里云账号授权

      通过如下命令对阿里云账号授权。

      -- 将阿里云账号加到租户内并给阿里云账号授权角色
      ADD TENANT USER <Aliyun$xxxx>;
      GRANT TENANT ROLE <role_name> TO USER <Aliyun$xxxx>;
      
      -- 查看租户role/user的权限
      SHOW GRANTS FOR TENANT ROLE <role_name>;
      SHOW GRANTS FOR TENANT USER <user_name>;
      SHOW PRINCIPALS FOR TENANT [ROLE] <role_name>;

      RAM用户授权

      RAM用户授权步骤如下:

      1. 登录MaxCompute控制台,在左上角选择地域。

      2. 在左侧导航栏,选择管理配置 > 租户管理 。

      3. 租户管理页面,单击用户管理页签。

      4. 用户管理页签,单击目标RAM用户对应操作列的修改角色

      5. 在弹出的编辑角色对话框,从待添加角色区域选择要为当前用户配置的角色,并配置到已添加角色区域,单击确定完成修改。

  3. 作业指定Quota

    在作业的Query前使用如下命令指定Quota。

    SET odps.task.wlm.quota = <quota_nick_name>; 

    quota_nick_nameQuota昵称,且仅对批处理类型的Quota有效。

    • 若是Spark作业指定Quota需要加配置项spark.hadoop.odps.task.wlm.quota填入<quota_nick_name>值。

    • 若是查询加速作业,需要注意以下几点:

      • 交互式Quota不能通过如上命令直接指定,只能通过进入查询加速模式时被系统自动选定,详情请参见查询加速(MCQA)

      • set odps.task.wlm.quota=<quota_nick_name>; 命令指定的Quota,含义是在交互Quota中执行任务失败后回退到quota_nick_name中执行,而不是加速Quota选择quota_nick_name,因此查询加速成功的作业消费仍将计入作业执行项目绑定的默认计算Quota。

      • 当不显式指定odps.task.wlm.quota时,交互式任务会尝试首先回退到Quota规则指定的Quota。如果没有配置Quota规则,任务将回退到项目的默认Quota。

Quota规则

MaxCompute支持对Quota配置规则条件,指定满足某些条件的作业可以被调度到对应的Quota里执行。

使用限制

  • 包年包月、按量付费(标准版和闲时版)二级Quota均支持规则配置。

  • 每个二级Quota最多可配置10条规则。

  • 每个规则中,项目作业Owner参数最多可输入50个对象,即一条规则最多可以指定给50个项目、50个作业Owner(uid)使用。

  • 每个规则中,Settings最多输入5Key Value对。

  • 每个规则中,作业优先级的取值范围是[0, 9]

配置Quota规则

只要配置了Quota规则,规则都是生效的。不需要时可以删除,多个规则之间为或(or)关系,即只要作业匹配该Quota任意一个规则即可被调度或被禁止调度到该Quota。

说明

Quota规则非常灵活,尤其是Settings规则项。配置时应当尽量保守地运用,防止规则过多给后期运维带来困难。

  1. 登录MaxCompute控制台,在左上角选择地域。

  2. 在左侧导航栏,选择管理配置 > 配额(Quota)管理 。

  3. Quota管理页面,点击一级Quota左侧image 图标,展开后可查看二级Quota列表。

  4. 单击目标二级Quota对应操作列的规则配置

  5. 在弹出的Quota规则配置对话框,单击添加规则或单击已存在规则操作列的克隆新建规则。参数配置如下:

    • 一个规则配置的多个项目、作业类型、作业Settings为与(and)关系。

    • 规则添加完成,等待约5分钟后才会生效。

    单击展开查看参数配置详情

    参数

    说明

    规则名称

    • 自定义Quota规则名称。

    • 支持字母开头,包含字母、数字和下划线(_)。

    规则模式

    Quota规则运行的模式,取值如下。

    • NORMAL:普通模式。

      若作业特征匹配Quota规则,则作业调度到该Quota运行。

      • 当作业匹配某个Quota规则时,作业就会调度到该Quota运行。

      • 当作业同时匹配多个Quota规则时,作业会调度到最早创建的Quota运行。

      • 当作业无法匹配任何一个Quota规则时,这个作业就会选择Project默认的Quota。尽管此时作业不匹配默认 Quota的规则。

      • 当通过作业级别指定Quota指定了一个etl_1Quota,则该作业将会调度到etl_1 Quota运行,即使此作业不匹配etl_1 Quota的规则。

    • EXCLUSIVE:排他模式。

      若作业特征匹配Quota规则,则作业调度到该Quota运行。反之禁止作业调度到该Quota运行。

      举例说明与普通模式的区别:

      • 假设etl_2QuotaProject_2关联的默认Quota,etl_2设置了排他模式规则。当Project_2发起的作业无法匹配etl_2 Quota的规则,此时作业也无法选择默认Quota,会导致提交作业报错(与普通模式规则的区别:若etl_2只有普通模式规则,此时作业是可以调度到etl_2中运行的)。

      • 通过set odps.task.wlm.quota=etl_3 (i.e. use quota etl_3)命令指定了一个Quota etl_3,若etl_3设置了排他模式规则,且作业特征不匹配该规则,提交作业会报错(与普通规则的区别:若etl_3只有普通规则,此时作业是可以调度到etl_3中运行的)。

    • ANTI:禁止模式。

      若作业特征匹配Quota规则,作业禁止调度到该Quota运行,会优先调度到所属项目的默认计算Quota运行,如果当前项目的默认计算Quota也是该Quota,那么会调度到当前Region下最早创建的Quota运行(包括按量计费Quota)。

    重要

    排他模式规则和禁止模式规则优先级高于普通模式规则。即如果作业不匹配Quota A的某个排他模式规则或者匹配某个禁用模式规则。则作业无论是否匹配Quota A的普通规则,或被手动指定到Quota A,都无法调度到Quota A运行。

    项目

    选择需要配置到规则里的项目,最多可选择50个项目。不选则表示所有项目。

    作业类型

    选择需要配置到规则里的作业类型。

    作业类型取值如下:

    • SQL:SQL作业

    • SQLRT:查询加速SQL作业

    • SQLCost:SQL预估作业

    • LOT:MapReduce作业

    • CUPID:SparkMars作业

    • AlgoTask:机器学习作业

    • MaxFrame:分布式计算引擎MaxFrame作业

    • Graph:图计算作业

    默认为空,表示选择所有作业类型。

    作业优先级

    • 输入需要配置到规则里的作业优先级。

    • 输入0-9优先级区间。例如,[0,3] 表示优先级为0、1、2、3优先级的作业。

    • 不填则表示所有优先级。

    作业Owner(账号ID)

    • 输入需要配置到规则里的作业Owner uid,多个uid为或(or)关系,请换行分隔,最多可输入50uid。

    • 若输入RAM用户uid需要加上p4_前缀,例如p4_12344566777

    • 不填则表示所有作业Owner。

    作业Settings

    • 请输入作业Settings中的Key Value,格式为Key=Value,无需加上引号。多个参数为与(and)关系,请换行分隔,最多可输入5个。

    • 例如,所有DataWorks调度发起的补数据作业都在当前Quota运行,可在作业Settings中输入SKYNET_DAGTYPE=3,详情请参见补数据作业隔离

    • 不填则表示所有Settings。

    项目、作业类型、作业优先级、作业所有者(UID)及作业Settings中,至少应有一个参数不为空,其余为空的参数则表示匹配所有选项。

应用示例

查询加速作业调度

查询加速作业调度

  • 加速Quota和回退Quota。

    查询加速作业需要同时准备两个Quota:

    • 一个是加速Quota(类型为交互式

    • 一个是回退Quota (类型为批处理)。

    当作业在加速Quota中执行超时或者因作业类型等原因被加速Quota拒绝执行时,系统会重新在回退Quota中提交作业。通过配置Quota规则,可以将一个ProjectJobowner同时加入一个加速Quota和一个回退Quota来实现上述逻辑。

  • Project、Jobowner等打开查询加速。

    创建交互式类型Quota时为不同的Quota配置不同的ProjectList规则项,实现按Project打开交互式Quota。

补数据作业隔离

补数据作业隔离

补数据作业(即重刷历史数据的作业)在回溯时间跨度较大时会消耗大量计算资源。为避免影响日常作业的正常运行,建议单独创建一个 Quota,并配置相应规则专门用于执行补数据作业。

例如,DataWorks 调度任务在发起补数据作业时,会固定向作业Settings中传入参数 SKYNET_DAGTYPE:3。基于此特征,可配置如下 Quota 规则:

  • 创建一个Quota命名为refill,对refillQuota配置规则。如果目标是:所有DataWorks的调度发起的补数据作业都默认到refill Quota里执行。配置普通模式规则,只需要在作业Settings里输入SKYNET_DAGTYPE=3即可。

  • 也可以进行更加细粒度的配置。例如,只希望P1 Project,作业优先级5 ~ 9之间的补数据作业到refillQuota执行。配置普通模式规则,项目选择P1,优先级输入[5,9]作业Settings输入SKYNET_DAGTYPE=3

    说明

    此处优先级是MaxCompute的优先级,不是DataWorks基线优先级。MaxCompute的优先级 = 9 - DataWorks基线优先级

隔离不同角色的作业

隔离不同角色的作业

作业可能由不同的业务人员发起,例如数据分析作业、定时报表任务作业、补数据作业等等。同时可能也来自不同的部门,每个部门资源预算也不一样。需要建立多个Quota,让不同角色的作业在不同的Quota中执行。

通常,通过项目作业Owner作业类型优先级作业Settings几个维度即可区分出作业的角色。

  • 当不同角色的作业使用不同的Project时:

    可以将Project名称配置到期望Quota的规则项目中。

  • 当不同角色的作业由不同的人员提交时:

    可以将作业Owneruid配置到期望Quota的规则项作业Owner中。

  • 当不同角色的作业有不同的配置时:

    可以通过作业Settings来区分角色。作业Settings是指作业提交的时候同时提交的set xxx=xxx;语句 ,有些是自定义,有些是系统默认加上的。如,通过DataWorks 发起的作业会默认设置一些参数信息,以便对作业进行识别。

  • 当不同的角色提交不同的作业类型时:

    可以通过作业类型区分。例如通过PAI平台提交的机器学习的任务,作业类型ALGO。通过MaxCompute提交的普通SQL查询,作业类型SQL

如上规则项也可以结合起来使用,实现更细粒度的作业调度控制。