クォータグループ(Quota)は、計算ジョブに必要な CPU とメモリリソースを提供する MaxCompute の計算リソースプールです。MaxCompute では、ジョブの計算リソース要件に基づいて適切なクォータを指定できるため、計算リソースを効率的に使用できます。このトピックでは、MaxCompute クォータの使用方法について説明します。
背景情報
MaxCompute では、次のいずれかの方法でクォータグループの計算リソースを使用できます。
プロジェクトのデフォルトのクォータグループを指定します。この方法では、プロジェクトでコミットされたすべてのジョブが、計算にこのクォータグループを使用します。
ジョブレベルでクォータグループを指定します。この方法では、計算のためにプロジェクト内のジョブに異なるクォータグループを指定できます。クォータグループは、サブスクリプションクォータグループと従量課金制クォータグループに分類されます。ジョブレベルで指定されたクォータグループの優先度は、プロジェクトのデフォルトのクォータグループの優先度よりも高くなります。
クォータグループのルールを構成します。この方法では、指定されたルールを満たすジョブを、関連するクォータグループにスケジュールできます。
プロジェクトのデフォルトクォータグループを指定する
プロジェクトのデフォルトクォータグループを指定すると、このプロジェクトで開始されたジョブは、デフォルトで計算にデフォルトクォータグループの計算リソースを使用します。追加の設定を行う必要はありません。プロジェクトを作成するときに、プロジェクトのデフォルトクォータグループを指定できます。また、MaxCompute コンソールの [プロジェクト] ページでプロジェクトを見つけて、[操作] 列の [クォータグループの切り替え] をクリックして、プロジェクトのデフォルトクォータグループを変更することもできます。詳細については、「プロジェクトを構成する」をご参照ください。
ジョブレベルでクォータグループを指定する
ジョブの SQL 文の前に SET コマンドを追加して、ジョブのクォータグループを指定できます。この機能は、ジョブ所有者がクォータグループを使用する権限を持っているかどうかを確認します。このセクションでは、手順について説明します。
クォータグループを作成します。
新しい MaxCompute コンソールでクォータグループを作成する方法の詳細については、「クォータを構成する」をご参照ください。
説明クォータグループ名を指定するときは、文字と数字の組み合わせを使用することをお勧めします。既存の中国語のクォータグループ名は引き続き使用できます。
必要な権限を付与します。
デフォルトでは、すべての Alibaba Cloud アカウント、RAM ユーザー、およびロールには、ジョブのクォータグループを指定する権限がありません。アカウントは、必要な権限が付与された後にのみ、ジョブのクォータグループを指定するために使用できます。
ロールを作成します。
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/*"]は、現在のテナントのすべてのリージョンのすべてのクォータグループを指定します。ビジネス要件に基づいて、特定のリージョンと特定のクォータグループを指定できます。[OK] をクリックします。
ジョブレベルでクォータグループを指定するために使用するアカウントに、作成したロールを割り当てます。
説明デフォルトでは、テナントレベルの Super_Administrator ロールが割り当てられている Alibaba Cloud アカウントまたは RAM ユーザーは、承認操作を実行できます。
承認操作は、権限が付与されるオブジェクトのタイプによって異なります。
Alibaba Cloud アカウント
Alibaba Cloud アカウントに権限を付与するには、次のコマンドを実行します。
-- 現在のテナントに Alibaba Cloud アカウントを追加し、指定されたロールを Alibaba Cloud アカウントに割り当てます。 Add tenant user <Aliyun$xxxx>; Grant tenant role <role_name> to user <Aliyun$xxxx>; -- テナントレベルのロールまたはユーザーの権限を表示します。 Show grants for tenant role <role_name>; Show grants for tenant user <user_name>; Show principals for tenant [role] <role_name>;RAM ユーザー
MaxCompute コンソール の左側のナビゲーションウィンドウで、[テナント] > [ユーザー] を選択します。
[ユーザー] ページで、必要な RAM ユーザーを見つけて、[操作] 列の [ロールの変更] をクリックします。
[ロールの編集] ダイアログボックスで、[使用可能なロール] セクションで必要なロールを選択して、[追加されたロール] セクションにロールを追加します。
[OK] をクリックします。
ジョブのクォータを指定します。
以前に作成したクォータをジョブに指定するには、ジョブの SQL 文の前に次のコマンドを追加します。
set odps.task.wlm.quota=<quotaname>;quotaname は、クォータの名前を指定します。このパラメーターは、バッチ処理タイプのクォータに対してのみ有効です。
説明Spark ジョブのクォータを指定する場合は、構成
odps.task.wlm.quota= <quotaname>を追加する必要があります。MaxCompute Query Acceleration (MCQA) ジョブの場合は、次の点に注意してください。
上記のコマンドを使用してインタラクティブクォータを直接指定することはできません。インタラクティブクォータは、MCQA が有効になっている場合にのみ、システムによって自動的に選択できます。詳細については、「MaxCompute Query Acceleration」をご参照ください。
set odps.task.wlm.quota=<quotaname>;コマンドを実行して MCQA ジョブのクォータを指定すると、ジョブがインタラクティブクォータで実行できなかった場合、quotanameで指定されたクォータで実行するようにロールバックされます。この場合、quotanameで指定されたクォータは MCQA ジョブのクォータとして選択されません。したがって、MCQA ジョブは、MCQA ジョブが実行されるプロジェクトに関連付けられたデフォルトのコンピューティングクォータのリソースを引き続き消費します。odps.task.wlm.quotaパラメーターを明示的に指定しない場合、インタラクティブタスクは クォータルール で指定されたクォータにロールバックしようとします。クォータルール が構成されていない場合、タスクはプロジェクトのデフォルトクォータにロールバックします。
クォータルール
MaxCompute では、クォータルールを構成できます。この方法では、ルールを満たすジョブを、関連するクォータを使用するようにスケジュールできます。
制限
MaxCompute の従量課金制スポットエディションで作成されたレベル 2 クォータとサブスクリプションレベル 2 クォータのルールを構成できます。
レベル 2 クォータごとに最大 10 個のルールを構成できます。
各ルールの [プロジェクト] フィールドと [ジョブ所有者] フィールドには、それぞれ最大 50 個のアイテムを設定できます。これは、1 つのルールに最大 50 個のプロジェクトと 50 人のジョブ所有者 (UID) を設定できることを意味します。
ルールごとに、[ジョブ設定] フィールドに最大 5 つのキーと値のペアを入力できます。
ルールごとの [ジョブの優先度] パラメータの有効な値:
[0, 9]。
クォータルールの構成
クォータルールは、構成後に有効になります。不要なルールは削除できます。複数のルールは OR 関係にあります。ジョブがクォータのルールのいずれかと一致する場合、ジョブはルールモードに基づいてクォータを使用するようにスケジュールされるか、クォータの使用を禁止されます。
クォータルール、特に [ジョブ設定] フィールドで構成したルールは柔軟です。ルールが多すぎることによる O&M の困難を防ぐため、必要なルールのみを構成することをお勧めします。
MaxCompute コンソール にログインします。上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、[ワークスペース] > [クォータ] を選択します。
[クォータ] ページで、目的のレベル 1 クォータを見つけて、レベル 1 クォータの左側の
アイコンをクリックして、クォータのレベル 2 クォータを展開します。管理するレベル 2 クォータを見つけて、[操作] 列の [ルールの構成] をクリックします。
[クォータルールの構成] ダイアログボックスで、[ルールの追加] をクリックするか、既存のルールを見つけて [操作] 列の [複製] をクリックして、ルールを作成します。
説明ルールで構成された複数のプロジェクト、ジョブタイプ、およびジョブ設定の間には、AND 関係があります。
ルールは、構成後約 5 分で有効になります。
次の表は、[ルールの追加] ダイアログボックスのパラメータについて説明しています。
パラメータ
説明
ルール名
カスタムクォータルールの名前。
名前には、文字、数字、アンダースコア(_)のみを含めることができ、文字で始める必要があります。
ルールモード
クォータルールのモード。有効な値:
NORMAL:通常モード。
このモードでは、ジョブの特性に基づいてクォータを使用するようにジョブをスケジュールするための次のメカニズムが提供されます。
ジョブがクォータのルールと一致する場合、ジョブはそのクォータを使用するようにスケジュールされます。
ジョブが同時に複数のクォータルールと一致する場合、ジョブは最も早く作成されたクォータを使用するようにスケジュールされます。
ジョブがいずれのクォータルールとも一致しない場合、ジョブがデフォルトクォータのルールと一致するかどうかに関係なく、ジョブはプロジェクトのデフォルトクォータを使用します。
ジョブレベルに基づいてジョブに
etl_1クォータが指定されている場合、ジョブがetl_1クォータのルールと一致するかどうかに関係なく、ジョブはetl_1クォータを使用するようにスケジュールされます。
EXCLUSIVE:排他モード。
ジョブの特性に基づいてジョブがクォータの排他モードのルールと一致する場合、ジョブはそのクォータを使用するようにスケジュールされます。そうでない場合、ジョブはそのクォータを使用するようにスケジュールできません。
次の例は、通常モードと排他モードの違いを示しています。
たとえば、
etl_2クォータはProject_2プロジェクトに関連付けられたデフォルトクォータであり、etl_2クォータには排他モードで実行されるルールが構成されています。Project_2 プロジェクトによって開始されたジョブがetl_2クォータのルールと一致しない場合、ジョブにはデフォルトクォータを選択できません。この場合、ジョブの送信時にエラーが報告されます。ただし、etl_2クォータに通常モードで実行されるルールのみを構成した場合、ジョブはetl_2クォータを使用するようにスケジュールできます。たとえば、
set odps.task.wlm.quota=etl_3 (つまり、クォータ etl_3 を使用する)コマンドを実行して、ジョブのetl_3クォータを指定します。etl_3クォータに排他モードで実行されるルールが構成されているが、ジョブがルールと一致しない場合、ジョブの送信時にエラーが報告されます。ただし、etl_3クォータに通常モードで実行されるルールのみを構成した場合、ジョブはetl_3クォータを使用するようにスケジュールできます。
ANTI:禁止モード。
ジョブの特性に基づいてジョブがクォータの禁止モードのルールと一致する場合、ジョブはそのクォータの使用を禁止されます。ジョブは、ジョブが属するプロジェクトのデフォルトクォータグループを使用するように優先的にスケジュールされます。プロジェクトのデフォルトの計算クォータがジョブの使用を禁止されているクォータである場合、ジョブは現在のリージョンで最も早く作成されたクォータを使用するようにスケジュールされます。従量課金制クォータが含まれます。
重要排他モードで実行されるルールと禁止モードで実行されるルールは、通常モードで実行されるルールよりも優先度が高くなります。ジョブがクォータ A の排他モードのルールと一致しない場合、または禁止モードのルールと一致する場合、ジョブがクォータ A の通常モードのルールと一致するか、またはクォータ A を使用するように手動で指定されているかどうかに関係なく、ジョブはクォータ A を使用するようにスケジュールできません。
プロジェクト
ルールで構成するプロジェクト。最大 50 個のプロジェクトを構成できます。オプションが選択されていない場合、すべてのプロジェクトが含まれます。
ジョブタイプ
ルールで構成するジョブのタイプ。
有効な値:
SQL:SQL ジョブ
SQLRT:MaxCompute MCQA SQL ジョブ
SQLCost:SQL コスト見積もりジョブ
LOT:MapReduce ジョブ
CUPID:Spark または Mars ジョブ
AlgoTask:Platform for AI (PAI) ジョブ
オプションが選択されていない場合、すべてのジョブタイプが含まれます。
ジョブの優先度
ルールで構成する必要があるジョブの優先度を入力します。
0 ~ 9の優先度範囲を入力します。たとえば、[0,3]は、優先度が 0、1、2、3 のジョブを示します。オプションが選択されていない場合、すべての優先度が含まれます。ジョブ所有者(アカウント ID)
ルールで構成するジョブ所有者のユーザー ID。最大 50 個のユーザー ID を入力できます。複数のユーザー ID は OR 関係にあります。各ユーザー ID は 1 行を占めます。
RAM ユーザーのユーザー ID に
p4_プレフィックスを追加する必要がある場合、ユーザー ID はp4_12344566777です。RAM ロールのユーザー ID にv4_プレフィックスを追加する必要がある場合、ユーザー ID はv4_12344566776です。オプションが選択されていない場合、すべてのジョブ所有者が含まれます。
ジョブ設定
Key=Value形式の 1 つ以上のキーと値のペアを入力できます。引用符は必要ありません。複数のキーと値のペアは AND 関係にあります。各キーと値のペアは 1 行を占めます。最大 5 つのキーと値のペアを入力できます。たとえば、現在のクォータで DataWorks の自動トリガータスクによって開始されたすべてのデータバックフィルジョブを実行する場合は、[ジョブ設定] フィールドに
SKYNET_DAGTYPE=3と入力します。詳細については、「データバックフィルジョブの分離」をご参照ください。オプションが選択されていない場合、すべての設定が含まれます。
プロジェクトでは、これらのパラメータの少なくとも 1 つが空であってはなりません:ジョブタイプ、ジョブの優先度、ジョブ所有者(UID)、およびジョブ設定。空のパラメータは、すべてのオプションが一致することを示します。
[OK] をクリックします。
例
MCQA ジョブのスケジュール
加速クォータとロールバッククォータ
MCQA ジョブには、加速クォータとロールバッククォータが必要です。加速クォータは インタラクティブ タイプであり、ロールバッククォータは バッチ タイプです。加速クォータを使用するジョブがタイムアウトした場合、またはジョブタイプなどの理由でジョブが加速クォータの使用を拒否された場合、システムはロールバッククォータでジョブを再送信します。クォータルールを作成して、プロジェクトまたはジョブ所有者を加速クォータとロールバッククォータの両方に追加し、上記のロジックを実装できます。
プロジェクトまたはジョブ所有者別に MCQA を有効にする
プロジェクトごとに インタラクティブ クォータを有効にするには、インタラクティブ クォータを作成するときに、異なるクォータに異なる
ProjectListルールを構成できます。
データバックフィルジョブの分離
データバックフィルジョブは、データを更新するために使用されます。データバックフィルプロセスに長期間が必要な場合、大量のリソースが消費されます。過剰なリソース消費が日次ジョブに与える影響を防ぐために、クォータを作成し、データバックフィルジョブのみを実行するようにクォータのルールを構成できます。たとえば、DataWorks の自動トリガータスクによって開始されたデータバックフィルジョブが
SKYNET_DAGTYPE:3パラメータを ジョブ設定 フィールドに固定的に渡す場合、次のクォータルールを構成できます。refillという名前のクォータを作成し、refillクォータのルールを構成します。DataWorks の自動トリガータスクによって開始されたすべてのデータバックフィルジョブがrefillクォータを自動的に使用してスケジュールされるようにするには、通常モードで実行されるルールを構成できます。通常モードで実行されるルールを構成するには、ジョブ設定 フィールドにSKYNET_DAGTYPE=3と入力するだけです。パラメータをきめ細かく構成することもできます。たとえば、
P1プロジェクトの 優先度 が5 ~ 9のデータバックフィルジョブのみをrefillクォータを使用するようにスケジュールする場合は、次の手順を実行して通常モードで実行されるルールを構成します。[プロジェクト] をP1に設定し、[ジョブの優先度] フィールドに[5,9]と入力してから、ジョブ設定 フィールドにSKYNET_DAGTYPE=3と入力します。説明ルールで構成されている優先度は、DataWorks のベースライン優先度ではなく、MaxCompute の優先度です。
MaxCompute の優先度 = 9 - DataWorks のベースライン優先度。
異なるロールによって開始されたジョブの分離
データ分析ジョブ、スケジュールされたレポートジョブ、データバックフィルジョブなどのジョブは、異なるビジネス担当者によって開始される場合があります。ジョブは、異なるリソースバジェットを持つ異なる部門から発生する場合もあります。したがって、異なるロールによって開始されたジョブが異なるクォータを使用できるように、複数のクォータを作成する必要があります。
ほとんどの場合、プロジェクト、ジョブ所有者(アカウント ID)、ジョブタイプ、ジョブの優先度、ジョブ設定 のパラメータに基づいてジョブのロールを識別できます。
異なるロールによって開始されたジョブが異なるプロジェクトを使用する場合、目的のクォータに作成するルールで、プロジェクト パラメータを必要なプロジェクトの名前に設定できます。
異なるロールによって開始されたジョブが異なるユーザーによって送信される場合、目的のクォータに作成するルールで、ジョブ所有者(アカウント ID) フィールドにジョブ所有者のユーザー ID を入力できます。
異なるロールによって開始されたジョブの設定が異なる場合、ジョブ設定 を構成して、ジョブのロールを区別できます。ジョブ設定 は、ジョブとともに送信される
SET xxx=xxx;文を指定します。SET 文は、カスタム文と自動的に追加される文に分類されます。たとえば、ジョブが DataWorks を使用して開始された場合、ジョブの識別に役立つ特定のパラメータが自動的に構成されます。異なるロールが異なるジョブタイプを送信する場合、ジョブタイプ パラメータの値に基づいてジョブタイプを識別できます。たとえば、PAI を使用して送信された PAI ジョブの ジョブタイプ パラメータの値は
ALGOであり、MaxCompute を使用して送信された通常の SQL クエリジョブの ジョブタイプ パラメータの値はSQLです。
上記のルールを一緒に使用して、よりきめ細かいジョブスケジューリングを実行できます。