配额组(Quota)是MaxCompute的计算资源池,为MaxCompute中的计算作业提供所需计算资源(CPU及内存)。在MaxCompute中支持根据计算作业对计算资源的需求,指定匹配的Quota,助力您高效使用计算资源。本文为您介绍如何使用MaxCompute的Quota。
背景信息
MaxCompute的计算资源配额组支持使用方式如下。
通过Project关联默认计算Quota,实现Project提交的作业使用此Quota进行计算。
作业级别指定使用计算Quota(use quota),通过此功能可以支持将一个Project里的作业指定到不同的Quota进行计算,包括指定包年包月、按量计费的Quota。作业级别指定的Quota优先级大于Project默认的Quota。
通过对Quota配置规则条件,实现满足规则条件的作业可调度到对应Quota。
Project设置默认Quota
Project设置默认计算Quota ,即此Project发起的作业默认会使用默认Quota的资源进行计算,无需其他设置。新建项目时可以直接选择关联默认Quota,也可以通过控制台项目管理对项目进行默认Quota切换,详情请参见配置项目。
作业级别指定Quota
作业级别指定Quota主要是在作业前面通过命令进行指定,此功能会校验作业所有者是否有该Quota的使用权限,具体操作步骤如下。
新建Quota。
使用新版控制台新建Quota请参见配置Quota。
说明Quota名称建议使用英文字母和数字的组合。已经存在的中文Quota名称可继续使用。
授权。
当前针对作业级别指定Quota功能的鉴权默认是所有账号(包括阿里云账号)和角色都没有权限,需要进行授权操作。
新增角色。
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏单击租户管理。
在租户管理页面,单击角色管理。
在角色管理页签,单击新增角色。
在新增角色对话框,自定义角色名称和使用如下权限策略内容。
{ "Statement": [{ "Action": [ "odps:List", "odps:Usage"], "Effect": "Allow", "Resource": ["acs:odps:*:regions/*/quotas/*"]}], "Version": "1" }
参数说明如下。
参数
说明
Action
指定被授予的操作权限名称。单次授权可以指定多个操作,可根据实际情况自行添加操作权限名称。当有多个操作时,多个操作名称之间使用半角逗号(,)分隔。操作取值请参见MaxCompute权限。
说明权限策略参数的详细内容请参见权限策略基本元素。
Resource
指定被授权的资源范围,格式为
["acs:odps:Tenant/${tenant_id}:regions/${region_id}/quotas/${quota_name}"]
。["acs:odps:*:regions/*/quotas/*"]
含义为当前租户下所有Region下的所有Quota,可根据实际情况自行选择具体Region和Quota。单击确定,完成新增角色。
将角色授权给需要进行作业级别指定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用户授权。
在MaxCompute控制台左侧导航栏,单击租户管理>用户管理。
在对应RAM用户的操作列,单击修改角色。
在编辑角色对话框,选择待添加角色区域中的目标角色至已添加角色区域。
单击确定,完成授权。
作业指定Quota。
在作业的Query前使用如下命令指定Quota。
set odps.task.wlm.quota=<quotaname>;
quotaname为Quota名称,且仅对批处理类型的Quota有效。
说明若您是Spark作业指定Quota需要加配置项
spark.hadoop.odps.task.wlm.quota
填入<quotaname>
值。对于查询加速作业,需要注意以下几点:
交互式Quota不能通过如上命令直接指定,只能通过进入查询加速模式时被系统自动选定,详情请参见查询加速(MCQA)。
set odps.task.wlm.quota=<quotaname>;
命令指定的Quota,含义是在交互Quota中执行任务失败后回退到quotaname
中执行,而不是加速Quota选择quotaname
,因此查询加速成功的作业消费仍将计入作业执行项目绑定的默认计算Quota。当不显式指定
odps.task.wlm.quota
时,交互式任务会尝试首先回退到Quota规则指定的Quota。如果没有配置Quota规则,任务将回退到项目的默认Quota。
Quota规则
MaxCompute支持对Quota配置规则条件,指定满足某些条件的作业可以被调度到对应的Quota里执行。
使用限制
包年包月、按量付费(标准版和闲时版)二级Quota均支持规则配置。
每个二级Quota最多可配置10条规则。
每个规则中,项目、作业Owner参数最多可输入50个对象,即一条规则最多可以指定给50个项目、50个作业Owner(uid)使用。
每个规则中,Settings最多输入5个Key Value对。
每个规则中,作业优先级的取值范围是
[0, 9]
。
配置Quota规则
只要配置了Quota规则,规则都是生效的,如果不需要可以删除,多个规则为或(or)关系,只要job匹配该Quota任意一个规则即可被调度或被禁止调度到该Quota。
Quota规则非常灵活,尤其是Settings规则项。配置时应当尽量保守的运用,防止规则过多给后期运维带来困难。
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,选择工作区 > 配额(Quota)管理。
在Quota管理页面,单击一级Quota左侧的图标可以展开二级Quota列表
单击目标二级Quota操作列的规则配置。
在Quota规则配置对话框,单击添加规则或单击已存在规则操作列的克隆新建规则,配置如下参数。
说明一个规则配置的多个项目、作业类型、作业Settings为与(and)关系。
规则添加完成,等待约5分钟后才会生效。
参数说明如下。
参数
说明
规则名称
自定义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运行,如果当前项目的默认计算Quota也是该Quota,那么会调度到当前Region下最早创建的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。
若输入RAM用户的uid需要加上
p4_
前缀,例如p4_12344566777
;若输入RAM角色的uid需加上v4_
前缀,例如v4_12344566776
。作业Settings
请输入作业Settings中的Key Value,格式为
Key=Value
,无需加上引号。多个参数为与(and)关系,请换行分隔,最多可输入5个。例如,所有DataWorks调度发起的补数据作业都在当前Quota运行,可在作业Settings中输入
SKYNET_DAGTYPE=3
,详情请参见补数据作业隔离。单击确定。
应用示例
查询加速作业调度
加速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
,对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中执行。
通常,通过项目、作业Owner、作业类型、优先级、作业Settings几个纬度即可区分出作业的角色。
当不同角色的作业使用不同的Project时:可以将Project名称配置到期望Quota的规则项目中。
当不同角色的作业由不同的人员提交时:可以将作业Owner的uid配置到期望Quota的规则项作业Owner中。
当不同角色的作业有不同的配置时,可以通过作业Settings来区分角色。作业Settings是指作业提交的时候同时提交的
set xxx=xxx;
语句 ,有些是自定义,有些是系统默认加上的,如通过DataWorks 发起的作业会默认设置一些参数信息,以便对作业进行识别。当不同的角色提交不同的作业类型时:可以通过作业类型区分。例如通过PAI平台提交的机器学习的任务,作业类型是
ALGO
。通过MaxCompute提交的普通SQL查询,作业类型是SQL
。
如上规则项也可以结合起来使用,实现更细粒度的作业调度控制。