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

背景信息

MaxCompute的计算资源配额组支持使用方式如下。
  • 通过Project关联默认计算Quota,实现Project提交的作业使用此Quota进行计算。
  • 作业级别指定使用计算Quota(use quota),通过此功能可以支持将一个Project里的作业指定到不同的Quota进行计算,包括指定包年包月、按量计费的Quota。作业级别指定的Quota优先级大于Project默认的Quota。
  • 通过对Quota配置规则条件,实现满足规则条件的作业可调度到对应Quota。
配额组(Quota)使用逻辑图如下所示。 quota使用逻辑

Project设置默认Quota

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

作业级别指定Quota

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

  1. 新建Quota。
    新建Quota请参见 设置配额组

    新版控制台提供全新的Quota管理交互,使用新版控制台新建Quota请参见配置Quota

    说明 Quota名称建议使用英文字母和数字的组合。已经存在的中文Quota名称可继续使用。
  2. 授权。
    当前针对作业级别指定Quota功能的鉴权默认是所有账号(包括阿里云账号)和角色都没有权限,需要进行授权操作。
    1. 新增角色。
      1. 登录MaxCompute控制台,在左上角选择地域,单击租户管理
      2. 租户管理页面,单击角色管理
      3. 角色管理页签,单击新增角色
      4. 新增角色对话框,自定义角色名称和使用如下权限策略内容。
        {
            "Statement": [{
                    "Action": [
                        "odps:List",
                        "odps:Usage"],
                    "Effect": "Allow",
                    "Resource": ["acs:odps:*:regions/*/quotas/*"]}],
            "Version": "1"
        }
        参数说明如下。
        参数 说明
        Action 指定被授予的操作权限名称。单次授权可以指定多个操作,可根据实际情况自行添加操作权限名称。当有多个操作时,多个操作名称之间使用半角逗号(,)分隔。操作取值请参见MaxCompute权限
        说明 权限策略参数的详细内容请参见 权限策略基本元素
        Resource 指定被授权的资源范围。

        ["acs:odps:*:regions/*/quotas/*"]含义为所有Region下的所有Quota,可根据实际情况自行选择具体Region和Quota。

      5. 单击确定,完成新增角色。
    2. 将角色授权给需要进行作业级别指定Quota的账号。
      说明 默认主账号或者拥有账户级别(tenant)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用户授权。
        1. MaxCompute控制台,单击用户管理
        2. 在对应RAM用户的角色列下拉框中勾选新增的角色,完成授权。
  3. 作业指定Quota。
    在作业的Query前使用如下命令指定Quota。
    set odps.task.wlm.quota=<quotaname>; 
    quotaname为Quota名称。

Quota规则

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

使用限制

  • 仅包年包月二级Quota支持规则配置。
  • 每个二级Quota最多可配置10条规则。
  • 每个规则中,项目作业Owner参数最多可输入50个对象,即一条规则最多可以指定给50个项目、50个作业Owner(uid)使用。
  • 每个规则中,Settings最多输入5个Key Value对。
  • 每个规则中,作业优先级的取值范围是[0, 9]

配置Quota规则

只要配置了Quota规则,规则都是生效的,如果不需要可以删除,多个规则为与(and)关系。
说明 Quota规则非常灵活,尤其是Settings规则项。配置时应当尽量保守的运用,防止规则过多给后期运维带来困难。
  1. 登录MaxCompute控制台,在左上角选择地域。
  2. 在左侧导航栏,单击Quota管理
  3. Quota管理页面,单击目标二级Quota操作列的规则配置
    规则配置
  4. Quota规则配置对话框,单击添加规则或单击已存在规则操作列的克隆新建规则,配置如下参数。
    参数说明如下。
    参数 说明
    规则名称 自定义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_2Quota是Project_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 A的某个排他模式规则或者匹配某个禁用模式规则。则作业无论是否匹配Quota A的普通规则,或被手动指定到Quota A,都无法调度到Quota A运行。
    项目 选择需要配置到规则里的项目,最多可选择50个项目。
    作业类型 选择需要配置到规则里的作业类型。
    作业类型取值如下:
    • SQL:SQL作业
    • SQLRT:查询加速SQL作业
    • SQLCost:SQL预估作业
    • LOT:MapReduce作业
    • CUPID:Spark或Mars作业
    • AlgoTask:机器学习作业
    作业优先级 输入需要配置到规则里的作业优先级。输入0-9优先级区间,如:[0,3] 表示优先级为0、1、2、3优先级的作业。
    作业Owner(uid) 输入需要配置到规则里的作业Owner uid,多个uid为或(or)关系,请换行分隔,最多可输入50个uid。
    作业Settings 请输入作业Settings中的Key Value,格式为Key=Value,如通过DataWorks调度发起的补数据作业SKYNET_DAGTYPE=3 ,多个参数为与(and)关系,请换行分隔,最多可输入5个。
  5. 单击确定

应用示例

  • 查询加速作业调度
    • 加速Quota和回退Quota。

      查询加速作业需要同时准备两个Quota,一个是加速Quota(类型是交互式),一个是回退Quota (类型为批处理)。当作业在加速Quota中执行超时或者因作业类型等原因被加速Quota拒绝执行时,系统会将作业重新在回退Quota中提交。您可以通过Quota规则,将一个Project或Jobowner同时加入一个加速Quota和一个回退Quota来实现上述逻辑。

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

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

  • 补数据作业隔离
    补数据作业即重刷数据作业,如果需要补很长时间的数据则会消耗很多资源,但是又不希望影响日常作业运行,那么您可以单独创建一个 Quota并设置好规则专门运行补数据作业。例如,DataWorks的调度任务发起补数据作业固定会传参数 SKYNET_DAGTYPE:3作业Settings里,那么可以配置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的规则项目中。
    • 当不同角色的作业由不同的人员提交时:可以将作业Owner的uid配置到期望Quota的规则项作业Owner中。
    • 当不同角色的作业有不同的配置时,可以通过作业Settings来区分角色。作业Settings是指作业提交的时候同时提交的set xxx=xxx;语句 ,有些是自定义,有些是系统默认加上的,如通过DataWorks 发起的作业会默认设置一些参数信息,以便对作业进行识别。
    • 当不同的角色提交不同的作业类型时:可以通过作业类型区分。例如通过PAI平台提交的机器学习的任务,作业类型ALGO。通过MaxCompute提交的普通SQL查询,作业类型SQL
    如上规则项也可以结合起来使用,实现更细粒度的作业调度控制。