配额组(Quota)是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
Project设置默认计算Quota ,即此Project发起的作业默认会使用默认Quota的资源进行计算,无需其他设置。新建项目时可以直接选择关联默认Quota,也可以通过控制台项目管理对项目进行默认Quota切换,详情请参见项目管理。
作业级别指定Quota
作业级别指定Quota主要是在作业前面通过命令进行指定,此功能会校验作业所有者是否有该Quota的使用权限,具体操作步骤如下。
新建Quota
使用新版控制台新建Quota请参见配置Quota。
说明Quota名称建议使用英文字母和数字的组合。已经存在的中文Quota名称可继续使用。
授权
当前针对作业级别指定Quota功能的鉴权默认为所有账号(包括阿里云账号)及角色都没有权限,需要单独授权。
新增角色
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,选择 。
在租户管理页面,单击角色管理页签。
在角色管理页签,单击新增角色,在弹出的新增角色对话框,填写自定义角色名称和policy内容,然后单击确定完成创建。
{ "Statement": [{ "Action": [ "odps:List", "odps:Usage"], "Effect": "Allow", "Resource": ["acs:odps:*:regions/*/quotas/*"]}], "Version": "1" }
将角色授权给需要进行作业级别指定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用户授权步骤如下:
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,选择 。
在租户管理页面,单击用户管理页签。
在用户管理页签,单击目标RAM用户对应操作列的修改角色。
在弹出的编辑角色对话框,从待添加角色区域选择要为当前用户配置的角色,并配置到已添加角色区域,单击确定完成修改。
作业指定Quota
在作业的Query前使用如下命令指定Quota。
SET odps.task.wlm.quota = <quota_nick_name>;quota_nick_name为Quota昵称,且仅对批处理类型的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最多输入5个Key Value对。
每个规则中,作业优先级的取值范围是
[0, 9]。
配置Quota规则
只要配置了Quota规则,规则都是生效的。不需要时可以删除,多个规则之间为或(or)关系,即只要作业匹配该Quota任意一个规则即可被调度或被禁止调度到该Quota。
Quota规则非常灵活,尤其是Settings规则项。配置时应当尽量保守地运用,防止规则过多给后期运维带来困难。
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,选择 。
在Quota管理页面,点击一级Quota左侧
图标,展开后可查看二级Quota列表。单击目标二级Quota对应操作列的规则配置。
在弹出的Quota规则配置对话框,单击添加规则或单击已存在规则操作列的克隆新建规则。参数配置如下:
一个规则配置的多个项目、作业类型、作业Settings为与(and)关系。
规则添加完成,等待约5分钟后才会生效。
应用示例
查询加速作业调度
查询加速作业调度
加速Quota和回退Quota。
查询加速作业需要同时准备两个Quota:
一个是加速Quota(类型为交互式)
一个是回退Quota (类型为批处理)。
当作业在加速Quota中执行超时或者因作业类型等原因被加速Quota拒绝执行时,系统会重新在回退Quota中提交作业。通过配置Quota规则,可以将一个Project或Jobowner同时加入一个加速Quota和一个回退Quota来实现上述逻辑。
按Project、Jobowner等打开查询加速。
创建交互式类型Quota时为不同的Quota配置不同的
ProjectList规则项,实现按Project打开交互式Quota。
补数据作业隔离
补数据作业隔离
补数据作业(即重刷历史数据的作业)在回溯时间跨度较大时会消耗大量计算资源。为避免影响日常作业的正常运行,建议单独创建一个 Quota,并配置相应规则专门用于执行补数据作业。
例如,DataWorks 调度任务在发起补数据作业时,会固定向作业Settings中传入参数 SKYNET_DAGTYPE:3。基于此特征,可配置如下 Quota 规则:
创建一个Quota命名为
refill,对refillQuota配置规则。如果目标是:所有DataWorks的调度发起的补数据作业都默认到refillQuota里执行。配置普通模式规则,只需要在作业Settings里输入SKYNET_DAGTYPE=3即可。也可以进行更加细粒度的配置。例如,只希望
P1Project,作业优先级在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。
如上规则项也可以结合起来使用,实现更细粒度的作业调度控制。