クォータグループは、MaxComputeのコンピューティングリソースプールであり、MaxComputeのコンピューティングジョブに必要なコンピューティングリソース (CPUコアやメモリなど) を提供します。 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
許可または拒否されるアクション。 ビジネス要件に基づいて、1つの権限付与操作に対して複数のアクションを指定できます。 複数のアクションを指定する場合は、コンマ (,) で区切ります。 サポートされているアクションの詳細については、「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アカウントに権限を付与するには、次のコマンドを実行します。
-- Add the Alibaba Cloud account to the current tenant and assign the specified role to the Alibaba Cloud account. Add tenant user <Aliyun$xxxx>; Grant tenant role <role_name> to user <Aliyun$xxxx>; -- View the permissions of the tenant-level role or 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ユーザーを見つけ、[操作] 列の [ロールの変更] をクリックします。
[ロールの編集] ダイアログボックスで、[使用可能なロール] セクションで必要なロールを選択し、[追加ロール] セクションにロールを追加します。
[OK] をクリックします。
ジョブのクォータを指定します。
ジョブのSQL文の前に次のコマンドを追加して、以前に作成したジョブのクォータを指定します。
set odps.task.wlm.quota=<quotaname>;
quotanameは、クォータの名前を指定します。 このパラメーターは、バッチ処理タイプのクォータに対してのみ有効です。
説明Sparkジョブのクォータを指定する場合は、設定
odps.task.wlm.quota
= <quotaname>
を追加する必要があります。MaxCompute Query Acceleration (MCQA) ジョブの場合、次の点に注意してください。
上記のコマンドを使用して、対話型クォータを直接指定することはできません。 対話型クォータは、MCQAが有効になっている場合にのみ、システムによって自動的に選択できます。 詳細については、「MaxComputeクエリアクセラレーション」をご参照ください。
set odps.task.wlm.quota=<quotaname>;
コマンドを実行してMCQAジョブのクォータを指定すると、ジョブが対話型クォータで実行されない場合、ジョブはquotaname
で指定されたクォータで実行されるようにロールバックされます。 この場合、quotaname
で指定されたクォータはMCQAジョブのクォータとして選択されません。 したがって、MCQAジョブは、MCQAジョブが実行されているプロジェクトに関連付けられている既定のコンピューティングクォータ内のリソースを引き続き消費します。odps.task.wlm.quota
パラメーターを明示的に指定しない場合、対話型タスクはクォータルールで指定されたクォータにロールバックしようとします。 クォータルールが設定されていない場合、タスクはプロジェクトのデフォルトのクォータにロールバックされます。
クォータルール
MaxComputeでは、クォータルールを設定できます。 このようにして、ルールを満たすジョブを、関連するクォータを使用するようにスケジュールできます。
制限事項
従量課金制のSpot Editionで作成されるレベル2クォータとサブスクリプションレベル2クォータのルールを設定できます。
レベル2のクォータごとに最大10個のルールを設定できます。
各ルールの [プロジェクト] および [ジョブ所有者] フィールドには、それぞれ最大50個の項目を設定できます。 これは、最大50のプロジェクトと50のジョブ所有者 (UID) のルールを設定できることを示しています。
各ルールの [ジョブ設定] フィールドには、最大5つのキーと値のペアを入力できます。
各ルールのJob Priorityパラメーターの有効な値:
[0,9]
。
クォータルールの設定
ルールを設定すると、クォータルールが有効になります。 必要のないルールを削除できます。 複数のルールにはOR関係があります。 ジョブがクォータのルールの1つに一致する場合、ジョブはクォータを使用するようにスケジュールされるか、ルールモードに基づいてクォータを使用することが禁止されます。
クォータルール、特に [ジョブ設定] フィールドで設定したルールは柔軟です。 過度のルールによるO&Mの問題を防ぐために、必要なルールのみを設定することをお勧めします。
MaxComputeコンソールにログインします。 上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、ワークスペース>クォータ. を選択します。
クォータページで、目的のレベル1クォータを見つけて、
クォータのレベル2クォータを展開するには、レベル1クォータの左側にあるアイコンを使用します。
管理するレベル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 (つまり、quota 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: スパークまたは火星のジョブ
AlgoTask: 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
と入力します。 詳細については、「データバックフィルジョブの分離」をご参照ください。OK. をクリックします。
例
MCQAジョブのスケジュール
アクセラレーションクォータとロールバッククォータ
MCQAジョブには、アクセラレーションクォータとロールバッククォータが必要です。 アクセラレーションクォータはインタラクティブタイプで、ロールバッククォータはバッチタイプです。 アクセラレーションクォータを使用するジョブがタイムアウトした場合、またはジョブの種類などの理由でアクセラレーションクォータの使用が拒否された場合、システムはロールバッククォータでジョブを再送信します。 クォータルールを作成して、プロジェクトまたはジョブ所有者をアクセラレーションクォータとロールバッククォータの両方に追加し、上記のロジックを実装できます。
プロジェクトまたはジョブオーナーによるMCQAの有効化
プロジェクトごとに対話型クォータを有効にするには、対話型クォータを作成するときに、異なるクォータに対して異なる
ProjectList
ルールを設定します。
データバックフィルジョブの分離
データバックフィルジョブは、データを更新するために使用される。 データバックフィルプロセスに長時間を要する場合、大量のリソースが消費される。 日々のジョブに対する過度のリソース消費の影響を防ぐために、クォータを作成し、そのクォータのルールを設定して、データバックフィルジョブを排他的に実行することができます。 たとえば、DataWorksの自動トリガータスクによって開始されたデータバックフィルジョブが
SKYNET_DAGTYPE:3
パラメーターを [ジョブ設定] フィールドに固定的に渡す場合、次のクォータルールを設定できます。refill
という名前のクォータを作成し、refill
クォータのルールを設定します。 DataWorksの自動トリガータスクによって開始されたすべてのデータバックフィルジョブが、補充
クォータを使用するように自動的にスケジュールされるようにする場合は、通常モードで実行されるルールを設定できます。 通常モードで実行されるルールを設定するには、[ジョブ設定] フィールドにSKYNET_DAGTYPE=3
と入力するだけです。パラメータをきめ細かく設定することもできます。 たとえば、
P1
プロジェクトの優先度の範囲が5〜9
のデータバックフィルジョブのみを補充
クォータを使用するようにスケジュールする場合は、次の手順を実行して、通常モードで実行されるルールを設定します。プロジェクトをP1
に設定し、ジョブ優先度フィールドに[5,9]
を入力します。[ジョブ設定] フィールドにSKYNET_DAGTYPE=3
と入力します。説明ルールで設定されている優先度は、MaxComputeの優先度ですが、DataWorksのベースライン優先度ではありません。
MaxComputeの優先度=9-DataWorksのベースライン優先度
。
異なるロールによって開始されるジョブを分離する
データ分析ジョブ、スケジュールされたレポートジョブ、およびデータバックフィルジョブなどのジョブは、異なるビジネス要員によって開始され得る。 仕事はまた、異なるリソース予算を有する異なる部門から来るかもしれない。 したがって、異なるロールによって開始されるジョブが異なるクォータを使用できるようにするには、複数のクォータを作成する必要があります。
ほとんどの場合、プロジェクト、ジョブオーナー (アカウントID) 、ジョブタイプ、ジョブ優先度、およびジョブ設定のパラメーターに基づいてジョブのロールを識別できます。
異なるロールによって開始されたジョブが異なるプロジェクトを使用する場合、Projectパラメーターを、目的のクォータに対して作成するルールで必要なプロジェクトの名前に設定できます。
異なるロールによって開始されたジョブが異なるユーザーによって送信された場合、希望するクォータに対して作成するルールの [ジョブ所有者 (アカウントID)] フィールドにジョブ所有者のユーザーIDを入力できます。
異なるロールによって開始されたジョブの構成が異なる場合、ジョブのロールを区別するようにジョブ設定を構成できます。 [ジョブ設定] は、ジョブとともに送信される
SET xxx=xxx;
ステートメントを指定します。 SETステートメントは、カスタムステートメントと自動的に追加されるステートメントに分類されます。 たとえば、DataWorksを使用してジョブを開始すると、ジョブの識別に役立つ特定のパラメーターが自動的に設定されます。異なるロールが異なるジョブタイプを送信する場合、[ジョブタイプ] パラメーターの値に基づいてジョブタイプを識別できます。 たとえば、PAIを使用して送信されるPAIジョブのJob Typeパラメーターの値は
ALGO
で、MaxComputeを使用して送信される通常のSQLクエリジョブのjob Typeパラメーターの値はSQL
です。
前述のルールを一緒に使用して、よりきめの細かいジョブスケジューリングを実行できます。