配額組(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
。
如上規則項也可以結合起來使用,實現更細粒度的作業調度控制。