ビジネスワークロードが変動する場合は、E-MapReduce (EMR) クラスタの自動スケーリングを有効にし、ビジネス要件に基づいてクラスタ内のタスクノードを増減する自動スケーリングルールを設定することをお勧めします。自動スケーリングは、コストを削減し、ジョブに十分な計算リソースを確保するのに役立ちます。このトピックでは、EMR コンソールでカスタム自動スケーリングルールを設定する方法について説明します。
前提条件
DataLake クラスタ、Dataflow クラスタ、オンライン分析処理 (OLAP) クラスタ、DataServing クラスタ、またはカスタムクラスタが作成されています。詳細については、「クラスタを作成する」をご参照ください。
クラスター内に、従量課金インスタンスまたはプリエンプティブルインスタンスを含むタスクノードグループが作成されていること。詳細については、「ノードグループの作成」をご参照ください。
制限
Elastic Compute Service (ECS) インスタンスの不足による自動スケーリングの失敗を防ぐために、ノードグループを追加する際に複数のインスタンスタイプを選択できます。最大 10 個の ECS インスタンスタイプを選択できます。ノードは、リスト内のインスタンスタイプの順序に基づいて作成されます。デフォルトでは、クラスターがスケールアウトされる際に、最初に選択されたインスタンスタイプが優先的に使用されます。インスタンスタイプが利用できない場合は、次のインスタンスタイプが使用されます。ノードの作成に使用されるインスタンスタイプは、在庫状況によって異なります。
YARN サービスがデプロイされているクラスタのみが、負荷ベースのスケーリングルールをサポートします。
注意事項
要件を満たすノードグループに自動スケーリングルールを追加できます。自動スケーリングルールがトリガーされると、自動スケーリング設定に基づいてノードグループが自動的にスケールインまたはスケールアウトされます。自動スケーリングルールが設定されていない場合は、自動スケーリングアクティビティはトリガーされません。
システムは、指定したインスタンスの仕様と一致するインスタンスタイプを自動的に検索し、[インスタンスタイプ] セクションにインスタンスタイプを表示します。[インスタンスタイプ] セクションで 1 つ以上のインスタンスタイプを選択する必要があります。これにより、選択したインスタンスタイプに基づいてクラスタをスケーリングできます。
複数の自動スケーリングルールが設定されていて、指定された条件が同時に満たされた場合、システムは次のルールに基づいてルールをトリガーして実行します。
スケールアウトルールはスケールインルールよりも優先されます。
時間ベースのスケーリングルールと負荷ベースのスケーリングルールは、トリガーシーケンスに基づいて実行されます。
負荷ベースのスケーリングルールは、クラスタ負荷メトリックがトリガーされた時間に基づいてトリガーされます。
同じクラスタ負荷メトリックで設定された負荷ベースのスケーリングルールは、ルールの設定順にトリガーされます。
手順
方法 1: 既存のクラスタにカスタムスケーリングルールを追加する
[自動スケーリング] タブに移動します。
上部のナビゲーションバーで、ビジネス要件に基づいてリージョン とリソースグループ を選択します。
[ECS 上の EMR] ページで、目的のクラスタを見つけ、[クラスタ ID/名前] 列にあるクラスタの名前をクリックします。
表示されたページで、[自動スケーリング] タブをクリックします。
自動スケーリングルールを設定します。
[自動スケーリングの設定] タブの [自動スケーリングルールの設定] セクションで、[カスタム自動スケーリングルール] をクリックします。[自動スケーリングルールの変更] メッセージで、[再設定] をクリックします。目的のノードグループを見つけ、[アクション] 列の [編集] をクリックします。
[自動スケーリングの設定] パネルで、次のパラメータを設定します。
現在のノードグループのノード数量の制限: 現在のノードグループのノード数の範囲を指定します。このパラメーターは、自動スケーリングルールに基づいてノードグループが自動的にスケールインまたはスケールアウトされる際の、ノードグループ内のノード数の上限と下限を定義します。ノードグループの最大および最小ノード数を変更するには、[制限の変更] をクリックします。
インスタンスの最大数: 現在のノードグループのノード数の上限を指定します。ノードグループのノード数が上限に達すると、ノードグループはそれ以上スケールアウトできなくなります。
インスタンスの最小数: 現在のノードグループのノード数の下限を指定します。ノードグループのノード数が下限に達すると、ノードグループはそれ以上スケールインできなくなります。
[トリガールール] : 現在のノードグループに設定されている自動スケーリングルールを表示します。ノードグループにさらに自動スケーリングルールを追加することもできます。
時間ベースのスケーリング
クラスターのコンピューティングワークロードが定期的に変動する場合、毎日、毎週、または毎月の決まった時間に特定の数のタスクノードを追加または削除して、コンピューティングリソースを補完または節約できます。これにより、ジョブを低コストで完了させることができます。自動スケーリングルールは、スケールアウトルールとスケールインルールに分かれています。
重要潜在的な競合を防ぎ、スケーリング操作がスムーズに進むようにするために、スケールアウトルールとスケールインルールの実行時間を同じ時点に設定しないでください。
次の表は、スケールアウトルールのパラメータについて説明しています。
パラメータ
説明
[スケールアウトタイプ]
スケジュールされたスケーリング。
[ルール名]
スケールアウトルールの名前。自動スケーリングルールの名前は、クラスタ内で一意である必要があります。
[頻度]
[繰り返し実行] : 自動スケーリングは、毎日、毎週、または毎月の特定の時点に実行されます。
[1 回だけ実行] : 自動スケーリングは、特定の時点で 1 回だけ実行されます。
[実行時間]
スケールアウトルールが実行される特定の時点。
[ルールの有効期限]
スケールアウトルールの有効期限。スケールアウトルールが期限切れになると、スケールアウトアクティビティはトリガーされません。このパラメータは、[頻度] パラメータを [繰り返し実行] に設定した場合にのみ使用できます。
[再試行時間範囲]
再試行間隔。さまざまな理由により、指定された時点で自動スケーリングが失敗する可能性があります。再試行間隔が指定されている場合、システムは、自動スケーリングが実行されるまで、このパラメータで指定された再試行間隔中に 30 秒ごとに自動スケーリングを再試行します。有効な値: 0 ~ 3600。単位: 秒。
例えば、自動スケーリング操作 A を指定された期間に実行する必要があるとします。この期間中に自動スケーリング操作 B がまだ進行中であるか、クールダウン状態にある場合、操作 A は実行できません。この場合、システムは指定した再試行間隔内で 30 秒ごとに操作 A の実行を試みます。必要な条件が満たされると、クラスターは直ちに自動スケーリングを実行します。
各スケールアウトのノード数
スケールアウトルールがトリガーされるたびにノードグループに追加されるノードの数。
[ベストエフォート配信]
スイッチをオンにすることをお勧めします。このスイッチをオンにすると、システムは正常に作成されたすべてのノードをベストエフォートで配信し、ビジネスの継続性を確保します。
たとえば、毎日 00:00 に 100 個のノードを追加するようにスケールアウトルールを設定し、90 個のノードのみが追加されたとします。[ベストエフォート配信] スイッチをオンにしていない場合、スケールアウトは失敗します。スイッチをオンにすると、90 個のノードが配信されます。
負荷ベースのスケーリング
説明YARN サービスがデプロイされているクラスタのみが、負荷ベースのスケーリングルールをサポートします。
ビッグデータ計算ワークロードの変動を正確に推定できないクラスタのタスクノードグループに、負荷ベースのスケーリングルールを追加できます。自動スケーリングルールは、スケールアウトルールとスケールインルールに分けられます。次の表は、スケールアウトルールのパラメータについて説明しています。
パラメータ
説明
[スケールアウトタイプ]
負荷に基づいてスケールアウトします。
[ルール名]
スケールアウトルールの名前。自動スケーリングルールの名前は、クラスタ内で一意である必要があります。
[負荷メトリックベースのトリガー条件]
スケールアウトルールをトリガーするために満たす必要がある条件。少なくとも 1 つのシステム定義の負荷メトリックを選択する必要があります。複数のシステム定義の負荷メトリックを選択するには、Add Metric をクリックします。次のパラメータを設定する必要があります。
負荷メトリック: システム定義の YARN 負荷メトリックを選択します。EMR 自動スケーリングメトリックと YARN 負荷メトリックのマッピングについては、「YARN 負荷メトリックと一致する EMR 自動スケーリングメトリックの説明」をご参照ください。
説明システム定義の負荷メトリックは、クラスタタイプによって異なります。サポートされているシステム定義の負荷メトリックは、EMR コンソールで確認できます。
統計方法: 各負荷メトリックのしきい値を指定するために使用されるルール。選択した各負荷メトリックの指定された集約ディメンション (平均、最大、または最小) の値が統計期間内にしきい値に達すると、スケールアウトルールが 1 回トリガーされます。
Multi-metric Relationship
スケールアウトルールのトリガーに使用されるメトリック間の関係。 有効な値: All Metrics Meet the Conditions および Any Metric Meets the Condition。
[統計期間]
選択した各負荷メトリックの指定された集約ディメンション (平均、最大、または最小) の値がしきい値に達しているかどうかを測定するための統計期間。データは、指定された統計期間に基づいて収集、集計、比較されます。統計期間が短いほど、スケールアウトルールがトリガーされる頻度が高くなる可能性があります。ビジネス要件に基づいて統計期間を指定します。
[スケールアウトをトリガーする繰り返し回数]
集計方法に基づいて、Auto Scaling は負荷メトリック値がしきい値を超えた各発生を記録します。指定された発生回数に達した後にのみ、対応するスケーリングルールをトリガーします。
各スケールアウトのノード数
スケールアウトルールがトリガーされるたびにノードグループに追加されるノードの数。
[ベストエフォート配信]
このスイッチをオンにすると、システムは正常に作成されたすべてのノードをベストエフォートで配信します。負荷ベースのスケーリングはメトリックの影響を受けます。ビジネス要件に基づいて、スイッチをオンにするかどうかを決定できます。
[クールダウン時間]
2 つのスケールアウトアクティビティの間隔。クールダウン時間中は、スケールアウト条件が満たされていても、スケールアウトルールはトリガーされません。スケールアウトアクティビティは、クールダウン時間が終了し、スケールアウト条件が再び満たされた後に実行されます。
ノードグループがスケールアウトされて予期された状態に達すると、クールダウン時間によって、後続のスケールアウトアクティビティをトリガーするクラスタ負荷メトリックが安定した状態に保たれます。
[有効期間]
スケールアウトルールが有効になる時間範囲。このパラメータはオプションです。デフォルトでは、スケールアウトルールは 1 日 24 時間使用できます。スケールアウトアクティビティは、このパラメータで指定された時間範囲内でのみトリガーされます。
[保存して適用] をクリックします。
スケールアウト条件が満たされると、ノードグループに対してスケールアウトアクティビティがトリガーされます。
方法 2: クラスタの作成時にカスタム自動スケーリングルールを追加する
上部のナビゲーションバーで、ビジネス要件に基づいてリージョンとリソースグループを選択します。
[クラスタの作成] をクリックします。詳細については、「クラスタを作成する」をご参照ください。
説明カスタム自動スケーリングルールを設定する前に、従量課金タスクノードグループを追加する必要があります。
[クラスタスケーリング] パラメータを設定します。
[カスタム自動スケーリングルール] をクリックします。目的のノードグループを見つけ、[アクション] 列の [編集] をクリックします。
[自動スケーリングの設定] パネルで、パラメーターを設定します。詳細については、「自動スケーリングルールを設定する」をご参照ください。
[保存して適用] をクリックします。
注文を確認します。
クラスタが作成されると、特定の条件が満たされたときに、ノードグループに対してスケーリングアクティビティがトリガーされます。
方法 3: SDK を使用してカスタム自動スケーリングルールを追加する
特定の API 操作を呼び出してクラスタを作成するか、タスクノードグループを作成するときに、タスクノードグループのカスタム自動スケーリングルールを設定して、システムがノードを自動的に管理できるようにすることができます。詳細については、「CreateCluster」および「CreateNodeGroup」をご参照ください。既存のタスクノードグループのカスタム自動スケーリングルールを設定することもできます。詳細については、「PutAutoScalingPolicy」をご参照ください。
次の Java コードは、負荷ベースのスケールアウトルールを設定する方法を示しています。
セキュリティトークンサービス (STS) トークンを使用して、より高いセキュリティを提供する Credentials クライアントを初期化することをお勧めします。詳細については、「アクセス認証情報を管理する」をご参照ください。
// このファイルは自動生成されたものです。編集しないでください。ありがとうございます。
package com.aliyun.sample;
import com.aliyun.tea.*;
public class Sample {
/**
* descriptionYARN 負荷メトリックと一致する EMR 自動スケーリングメトリックの説明
キュー関連の自動スケーリングメトリックの場合、`queue_name` パラメーターはキュー名を指定します。デフォルト値は `root` です。カスタムキューを指定できます。
パーティション関連の自動スケーリングメトリックの場合、`partition_name` パラメーターはパーティション名を指定します。このパラメーターは空にできません。
EMR 自動スケーリングメトリック | サービス | 説明 |
yarn_resourcemanager_queue_AvailableVCores | YARN | 指定されたキューで利用可能な仮想 CPU コアの数。 |
yarn_resourcemanager_queue_PendingVCores | YARN | 指定されたキューで保留中の仮想 CPU コアの数。 |
yarn_resourcemanager_queue_AllocatedVCores | YARN | 指定されたキューに割り当てられた仮想 CPU コアの数。 |
yarn_resourcemanager_queue_ReservedVCores | YARN | 指定されたキューで予約されている仮想 CPU コアの数。 |
yarn_resourcemanager_queue_AvailableMB | YARN | 指定されたキューで利用可能なメモリの量。 |
yarn_resourcemanager_queue_PendingMB | YARN | 指定されたキューで保留中のメモリの量。 |
yarn_resourcemanager_queue_AllocatedMB | YARN | 指定されたキューに割り当てられたメモリの量。 |
yarn_resourcemanager_queue_ReservedMB | YARN | 指定されたキューで予約されているメモリの量。 |
yarn_resourcemanager_queue_AppsRunning | YARN | 指定されたキューで実行中のジョブの数。 |
yarn_resourcemanager_queue_AppsPending | YARN | 指定されたキューで一時停止中のジョブの数。 |
yarn_resourcemanager_queue_AppsKilled | YARN | 指定されたキューで停止したジョブの数。 |
yarn_resourcemanager_queue_AppsFailed | YARN | 指定されたキューで失敗したジョブの数。 |
yarn_resourcemanager_queue_AppsCompleted | YARN | 指定されたキューで完了したジョブの数。 |
yarn_resourcemanager_queue_AppsSubmitted | YARN | 指定されたキューで送信されたジョブの数。 |
yarn_resourcemanager_queue_AllocatedContainers | YARN | 指定されたキューに割り当てられたコンテナーの数。 |
yarn_resourcemanager_queue_PendingContainers | YARN | 指定されたキューで保留中のコンテナーの数。 |
yarn_resourcemanager_queue_ReservedContainers | YARN | 指定されたキューで予約されているコンテナーの数。 |
yarn_resourcemanager_queue_AvailableMBPercentage | YARN | 指定されたキューで利用可能なメモリリソースの割合。 説明 このメトリックは、V3.43.0、V5.9.0 以降のマイナーバージョンの EMR クラスタで使用できます。 |
yarn_resourcemanager_queue_PendingContainersRatio | YARN | 指定されたキュー内の保留中のコンテナーと割り当てられたコンテナーの比率。 説明 このメトリックは、V3.43.0、V5.9.0 以降のマイナーバージョンの EMR クラスタで使用できます。 |
yarn_resourcemanager_queue_AvailableVCoresPercentage | YARN | 指定されたキューで利用可能な CPU コアの割合。 説明 このメトリックは、V3.43.0、V5.9.0 以降のマイナーバージョンの EMR クラスタで使用できます。 |
yarn_cluster_numContainersByPartition | YARN | 指定されたパーティションのコンテナの数。partition_name パラメータはパーティション名を指定します。 説明 このメトリックは、V3.44.0、V5.10.0 以降のマイナーバージョンの EMR クラスタで使用できます。 |
yarn_cluster_usedMemoryMBByPartition | YARN | 指定されたパーティションで使用されているメモリの量。`partition_name` パラメーターはパーティション名を指定します。 説明 このメトリックは、V3.44.0、V5.10.0 以降のマイナーバージョンの EMR クラスタで使用できます。 |
yarn_cluster_availMemoryMBByPartition | YARN | 指定されたパーティションで利用可能なメモリの量。`partition_name` パラメーターはパーティション名を指定します。 説明 このメトリックは、V3.44.0、V5.10.0 以降のマイナーバージョンの EMR クラスタで使用できます。 |
yarn_cluster_usedVirtualCoresByPartition | YARN | 指定されたパーティションで使用されている CPU コアの数。`partition_name` パラメーターはパーティション名を指定します。 説明 このメトリックは、V3.44.0、V5.10.0 以降のマイナーバージョンの EMR クラスタで使用できます。 |
yarn_cluster_availableVirtualCoresByPartition | YARN | 指定されたパーティションで利用可能な CPU コアの数。`partition_name` パラメーターはパーティション名を指定します。 説明 このメトリックは、V3.44.0、V5.10.0 以降のマイナーバージョンの EMR クラスタで使用できます。 |