auto scaling 機能は、クラウドベースのビッグデータプラットフォームである E-MapReduce (EMR) が提供するコア機能です。auto scaling ルールを設定すると、システムはビジネス要件に基づいて EMR クラスターのノードを追加または削除します。これにより、ビジネスのワークロードの変動に対応し、コストを削減できます。このトピックでは、ビジネス要件に基づいて EMR クラスターに適切な auto scaling ルールを設定する方法について説明します。
前提条件
-
DataLake、Dataflow、OLAP、DataServing、またはカスタムクラスターを作成済みであること。詳細については、「クラスターの作成」をご参照ください。
-
クラスターに、従量課金またはプリエンプティブルインスタンスを使用するタスクノードグループが含まれていること。詳細については、「ノードグループの追加」をご参照ください。
ステップ 1:トリガーモードの選択
ユースケースに基づいてトリガーモードを選択できます。
|
ユースケース |
トリガーモード |
|
ワークロードに予測可能な時間ベースのパターンがある、または特定の期間に安定したノード数が必要な場合。 |
時間ベースのスケーリングを使用して、ビジネス要件を迅速に満たします。 |
|
ワークロードが明確な時間パターンなしで変動し、ビジネスのボリュームに基づいて変化する場合。 |
負荷ベースのスケーリングを使用します。このモードは、メトリックを監視してワークロードの変動を検出し、ルールに基づいてスケーリングをトリガーすることで、ジョブに十分なリソースを確保します。 |
|
お客様のワークロードには、時間に基づく予測可能なパターンと、ロードに基づく変動の両方が見られます。 |
時間ベースのスケーリングと負荷ベースのスケーリングを組み合わせて、スケーリングルールを設定できます。 |
ステップ 2:auto scaling ルールの設定
複数の auto scaling ルールが同時に条件を満たした場合、システムは次の優先度に従ってルールを実行します:
-
スケールアウトルールはスケールインルールよりも優先されます。
-
時間ベースのルールと負荷ベースのルールは、トリガーされた順に実行されます。
-
負荷ベースのスケーリングの場合、ルールはトリガーされたメトリックのタイムスタンプに基づいて優先順位が付けられます。
-
同じトリガーメトリックを共有する負荷ベースのスケーリングルールは、作成された順にトリガーされます。
時間ベースのスケーリング
ビジネスボリュームが増加する可能性が高い時点に基づいて、繰り返し実行される、または一度だけ実行される時間ベースのスケールアウトルールを設定できます。また、オフピーク時間にノード数を削減するためのスケールインルールも設定できます。設定した時間ベースのスケーリングルールが繰り返し実行される場合、Rule Expiration Time パラメーターを設定して、ルールの有効期限を指定できます。時間ベースのスケーリングルールが有効期限切れになると、スケーリングアクティビティはトリガーされません。
たとえば、ビジネスのワークロードが毎日 22:00 に増加し、04:00 に減少する場合、毎日 22:00 に繰り返し実行される時間ベースのスケールアウトルールと、毎日 04:00 に繰り返し実行される時間ベースのスケールインルールを設定できます。
パラメーターとクラスターの負荷メトリックの詳細については、「カスタム auto scaling ポリシーの作成」をご参照ください。
負荷ベースのスケーリング
デフォルトでは、EMR はスケーリングのための一般的なメトリックを推奨します。クラスターのメトリックの傾向に基づいて、特定のしきい値を設定する必要があります。値を設定した後、決定 をクリックし、次に Save and Apply をクリックします。ルールはワークロードの変更に応じて自動的にトリガーされます。
ご利用のクラスターのニーズに合ったスケーリングルールを設定するには、次の手順に従います。
-
適切なメトリックの選択
Monitoring タブの Metric Monitoring ページに移動します。ダッシュボードのドロップダウンリストから [YARN-HOME] を選択します。時間の経過に伴うワークロードの変化に応じてメトリックがどのように変化したかを観察し、最も適切なものを選択します。

メトリックの値は、キャパシティの変更と反比例の関係にある必要があります。スケーリングアクティビティが発生した後、インスタンス数が変化するとメトリックの値は減少します。
たとえば、
yarn_resourcemanager_queue_AppsPendingの平均値が 1 回連続して 1 以上である場合にノードを 1 つ追加するスケールアウトルールを設定できます。このスケールアウトアクティビティの後、キュー内の保留中のアプリケーション数は減少するはずです。次の表に、推奨されるメトリックを示します。
メトリック
サービス
説明
yarn_resourcemanager_queue_AvailableMBPercentage
YARN
ルートキューで使用可能なメモリリソースの割合。
yarn_resourcemanager_queue_AvailableVCores
YARN
ルートキューで割り当て可能な vCPU の数。
yarn_resourcemanager_queue_AvailableMB
YARN
ルートキューで割り当て可能なメモリ量。単位:MB。
yarn_resourcemanager_queue_AppsPending
YARN
ルートキュー内の保留中のアプリケーション数。
yarn_resourcemanager_queue_PendingContainers
YARN
ルートキューで割り当てを待機しているコンテナの数。
yarn_resourcemanager_queue_AvailableVCoresPercentage
YARN
ルートキューで使用可能な vCPU リソースの割合。
-
適切なスケーリングルールの設定
-
初めてルールを設定する場合、スケールアウトルールには保留関連のメトリックを、スケールインルールには可用性関連のメトリックを使用することから始めるのが良いでしょう。
-
単一のルール内で、複数のメトリックベースの条件を定義し、それらの間に AND/OR ロジックを指定することで、スケーリングトリガーをより細かく制御できます。
-
頻繁なスケーリングによるリソースの無駄を防ぐために、スケールインルールにクールダウン時間を設定します。クールダウン時間中、条件が満たされてもシステムは新しいスケーリングアクティビティをトリガーしません。
ノードを追加するための平均時間は 1.55 分、100 ノードを追加するための平均時間はわずか 1.83 分です。スケールアウトルールのクールダウン時間を 100 から 300 (単位:秒) の範囲の値に設定できます。これにより、新しいノードが使用された後、設定されたクラスターの負荷メトリックの値が減少したかどうかを確認し、別のスケールアウトアクティビティが必要かどうかを判断できます。これはリソースの無駄を防ぐのに役立ちます。
-
メトリックの変更により迅速に対応するために、統計期間を 1 分に設定することを推奨します。統計期間が長すぎると、古い履歴データに基づいてスケーリングアクティビティがトリガーされ、不必要な無駄が生じる可能性があります。
-
現在のノードの処理能力と予想されるワークロードの増加に基づいて、追加または削除するインスタンスの数を設定します。メトリックを目的の範囲に戻すために必要なノード数を見積もります。
-
時間制約 (ルールがアクティブになる 1 日の中での時間範囲) を設定して、異なるスケーリングルールを組み合わせ、異なる時間帯に異なるスケーリング条件を適用します。
-
-
最小サイズと最大サイズの設定
Limits on Node Quantity of Current Node Group パラメーターは、現在のノードグループのノード数の制限を指定します。Maximum Number of Instances パラメーターは、現在のノードグループのノード数の上限を指定します。これにより、ノードグループが無制限にスケールアウトされるのを防ぎます。Minimum Number of Instances パラメーターは、ビジネスを処理するために必要なノード数の下限を指定します。予期しない要因でインスタンスがリリースされた場合、システムはインスタンスを追加して最小インスタンス数を満たします。
-
ルールの調整
ルールを設定した後、一定期間メトリックとスケーリングアクティビティの履歴を監視し、必要に応じてパラメーターを調整します。
-
スケーリングアクティビティが頻繁すぎ、新しく追加されたインスタンスがアイドル状態であるか、すぐにスケールインされる場合は、AND 演算子を使用してトリガー条件をより厳しくするか、ルールの Cooldown Time を延長することを検討してください。
-
単一のジョブを処理するために複数のスケールアウトイベントが必要な場合、またはスケーリングがワークロードに追いつくほど速くない場合は、各スケーリングアクティビティで追加されるインスタンスの数を増やすことを検討してください。
-