配额组(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)使用逻辑图如下所示。

Project设置默认Quota
作业级别指定Quota
作业级别指定Quota主要是在作业前面通过命令进行指定,此功能会校验作业所有者是否有该Quota的使用权限,具体操作步骤如下。
- 新建Quota。
- 授权。
当前针对作业级别指定Quota功能的鉴权默认是所有账号(包括阿里云账号)和角色都没有权限,需要进行授权操作。
- 作业指定Quota。
在作业的Query前使用如下命令指定Quota。
quotaname为Quota名称。set odps.task.wlm.quota=<quotaname>;
Quota规则
MaxCompute支持对Quota配置规则条件,指定满足某些条件的作业可以被调度到对应的Quota里执行。
使用限制
- 仅包年包月二级Quota支持规则配置。
- 每个二级Quota最多可配置10条规则。
- 每个规则中,项目、作业Owner参数最多可输入50个对象,即一条规则最多可以指定给50个项目、50个作业Owner(uid)使用。
- 每个规则中,Settings最多输入5个Key Value对。
- 每个规则中,作业优先级的取值范围是
[0, 9]
。
配置Quota规则
只要配置了Quota规则,规则都是生效的,如果不需要可以删除,多个规则为与(and)关系。
说明 Quota规则非常灵活,尤其是Settings规则项。配置时应当尽量保守的运用,防止规则过多给后期运维带来困难。
- 登录MaxCompute控制台,在左上角选择地域。
- 在左侧导航栏,单击Quota管理。
- 在Quota管理页面,单击目标二级Quota操作列的规则配置。
- 在Quota规则配置对话框,单击添加规则或单击已存在规则操作列的克隆新建规则,配置如下参数。
参数说明如下。
参数 说明 规则名称 自定义Quota规则名称。 支持字母开头,包含字母、数字和下划线(_)。
规则模式 Quota规则运行的模式,取值如下。 - NORMAL:普通模式。
若作业特征匹配Quota规则,则作业调度到该Quota运行。
- 当作业匹配某个Quota规则时,作业就会调度到该Quota运行。
- 当作业同时匹配多个Quota规则时,作业会调度到最早创建的Quota运行。
- 当作业无法匹配任何一个Quota规则时,这个作业就会选择Project默认的Quota。尽管此时作业不匹配默认 Quota的规则。
- 当通过作业级别指定Quota指定了一个
etl_1
Quota,则该作业将会调度到etl_1
Quota运行,即使此作业不匹配etl_1
Quota的规则。
- EXCLUSIVE:排他模式。
若作业特征匹配Quota规则,则作业调度到该Quota运行。反之禁止作业调度到该Quota运行。
举例说明与普通模式的区别:- 假设
etl_2
Quota是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)
命令指定了一个Quotaetl_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个。 - NORMAL:普通模式。
- 单击确定。
应用示例
- 查询加速作业调度
- 加速Quota和回退Quota。
查询加速作业需要同时准备两个Quota,一个是加速Quota(类型是交互式),一个是回退Quota (类型为批处理)。当作业在加速Quota中执行超时或者因作业类型等原因被加速Quota拒绝执行时,系统会将作业重新在回退Quota中提交。您可以通过Quota规则,将一个Project或Jobowner同时加入一个加速Quota和一个回退Quota来实现上述逻辑。
- 按Project、Jobowner等打开查询加速。
创建交互式类型Quota时为不同的Quota配置不同的
ProjectList
规则项,实现按Project打开交互式Quota。
- 加速Quota和回退Quota。
- 补数据作业隔离
补数据作业即重刷数据作业,如果需要补很长时间的数据则会消耗很多资源,但是又不希望影响日常作业运行,那么您可以单独创建一个 Quota并设置好规则专门运行补数据作业。例如,DataWorks的调度任务发起补数据作业固定会传参数
SKYNET_DAGTYPE:3
到 作业Settings里,那么可以配置Quota规则如下:- 创建一个Quota命名为
refill
,对refill
Quota配置规则,如果目标是:所有DataWorks的调度发起的补数据作业都默认到refill
Quota里执行。配置普通模式规则,只需要在作业Settings里输入SKYNET_DAGTYPE=3
即可。 - 也可以进行更加细粒度的配置,例如,只希望
P1
Project,作业优先级在5 ~ 9
之间的补数据作业到refill
Quota执行。配置普通模式规则,项目选择P1
,优先级输入[5,9]
,作业Settings输入SKYNET_DAGTYPE=3
。说明 此处优先级是MaxCompute的优先级,不是DataWorks基线优先级。MaxCompute的优先级 = 9 - Dataworks基线优先级
。
- 创建一个Quota命名为
- 隔离不同角色的作业
作业可能由不同的业务人员发起,例如数据分析作业、定时报表任务作业、补数据作业等等,同时可能也来自不同的部门,每个部门资源预算也不一样。需要建立多个Quota,让不同角色的作业在不同的Quota中执行。
通常,通过 项目、 作业Owner、 作业类型、 优先级、 作业Settings几个纬度即可区分出作业的角色。- 当不同角色的作业使用不同的Project时:可以将Project名称配置到期望Quota的规则项目中。
- 当不同角色的作业由不同的人员提交时:可以将作业Owner的uid配置到期望Quota的规则项作业Owner中。
- 当不同角色的作业有不同的配置时,可以通过作业Settings来区分角色。作业Settings是指作业提交的时候同时提交的
set xxx=xxx;
语句 ,有些是自定义,有些是系统默认加上的,如通过DataWorks 发起的作业会默认设置一些参数信息,以便对作业进行识别。 - 当不同的角色提交不同的作业类型时:可以通过作业类型区分。例如通过PAI平台提交的机器学习的任务,作业类型是
ALGO
。通过MaxCompute提交的普通SQL查询,作业类型是SQL
。