ビジネスのワークロードが変動する場合、オートスケーリングを有効にしてスケーリングルールを設定することを推奨します。これにより、E-MapReduce (EMR) はワークロードの変動に応じてタスクノードを追加または削除し、コストを節約しながらジョブの完了を保証します。このトピックでは、EMR on ECS コンソールでオートスケーリングを設定する方法について説明します。
前提条件
Hadoop クラスターが作成されていること。詳細については、「クラスターの作成」をご参照ください。
注意事項
スケールアウトするノードのハードウェア仕様、つまりインスタンスタイプを指定できます。インスタンスタイプは、オートスケーリングが無効な場合にのみ設定できます。インスタンスタイプを変更する必要がある場合は、オートスケーリングを無効にし、仕様を変更してから、再度オートスケーリングを有効にしてください。
システムは、選択した vCPU とメモリの仕様に一致するインスタンスタイプを自動的に照合してリストアップします。クラスターがこれらの仕様でスケールアウトできるように、このリストから目的のインスタンスタイプを選択する必要があります。
ECS 在庫の不足によるオートスケーリングの失敗を防ぐために、最大 3 つの ECS インスタンスタイプを選択できます。
Ultra ディスクまたは標準 SSD のいずれを選択しても、データディスクの最小サイズは 40 GB です。
負荷ベースのスケーリングは、CloudMonitor に依存するオートスケーリンググループの動的な管理機能です。スケーリングルールを正常に設定すると、システムは CloudMonitor に対応するアラームルールを自動的に作成します。EMR のオートスケーリングアクティビティが正しく機能するように、システムが生成したこれらのアラームルールを変更、削除、または無効にしないでください。
操作手順
オートスケーリングページに移動します。
EMR on ECS コンソールにログインします。
上部のナビゲーションバーで、必要に応じてリージョンとリソースグループを選択します。
[EMR on ECS] ページで、対象クラスターのクラスター ID をクリックします。
Auto Scaling タブをクリックします。
オートスケーリンググループを作成します。
Configure Scaling タブで、オートスケーリンググループの作成 をクリックします。
説明オートスケーリンググループは、Auto Scaling ページでのみ管理および設定できます。ノード管理ページからは管理できません。
オートスケーリンググループの追加 ダイアログボックスで、ノードグループ名 を入力し、OK をクリックします。
Configure Scaling タブで、対象のノードグループを見つけ、[操作] 列の Configure Rule をクリックします。
Auto Scaling の設定 パネルで、基本情報 セクションのパラメーターを設定します。
パラメーター
説明
Maximum Number of Instances
オートスケーリンググループ内のタスクノードの最大数。スケーリングルールがトリガーされても、グループはこの上限を超えてスケールアウトしません。最大値は 1,000 です。
Minimum Number of Instances
オートスケーリンググループ内のタスクノードの最小数。グループはこの数を下回るスケールインを行いません。
例えば、現在の数が 0 のときに 1 ノードを追加するルールがトリガーされても、最小値が 3 に設定されている場合、システムは最小要件を満たすために 3 ノードを追加します。
Graceful Shutdown
YARN ジョブを実行しているタスクノードをデコミッションするためのタイムアウトを設定できます。ノードは、実行中のジョブがない場合、または実行中のジョブがタイムアウトを超えた場合にデコミッションされます。最大タイムアウトは 3,600 秒です。
重要グレースフルシャットダウンを有効にする場合は、まず YARN パラメーターの yarn.resourcemanager.nodes.exclude-path の値を /etc/ecm/hadoop-conf/yarn-exclude.xml に変更してください。
タイムアウトを変更した後、変更を有効にするには、オフピーク時に YARN ResourceManager を再起動してください。
Auto Scaling の設定 パネルのインスタンスセクションで、インスタンスモード、課金方法、インスタンスタイプを選択します。
Single Billing Method
システムは、vCPU とメモリの仕様に一致するインスタンスタイプを自動的に見つけ、[インスタンスタイプ] セクションに表示します。クラスターがスケールアウトできるように、1 つ以上のインスタンスタイプを選択する必要があります。
Pay-as-you-go
インスタンスタイプを選択する順序によって、プロビジョニングの優先順位が決まります。EMR と ECS の両方のインスタンス価格を含む、各インスタンスの時間単価が表示されます。
Preemptible Instance
重要ジョブに高いサービスレベルアグリーメント (SLA) 要件がある場合は、このインスタンスタイプを慎重に使用してください。スポットインスタンスは、入札の失敗などの理由で回収される可能性があり、ジョブが中断されることがあります。
インスタンスタイプを選択する順序によって、プロビジョニングの優先順位が決まります。各インスタンスタイプの時間単位の従量課金価格が表示されます。また、各インスタンスタイプの時間単位の最大価格 (入札価格) を設定することもできます。インスタンスは、現在の市場価格が入札価格以下の場合にのみ起動されます。詳細については、「スポットインスタンスとは」をご参照ください。
Cost Optimization Mode
このモードでは、詳細なコストコントロールポリシーを作成して、コストと安定性のバランスを取ることができます。
パラメーター
説明
Minimum Pay-As-You-Go Nodes in Auto Scaling Group
オートスケーリンググループで必要な従量課金インスタンスの最小数。現在の従量課金インスタンスの数がこの値を下回る場合、新しいインスタンスはまず従量課金インスタンスとしてプロビジョニングされます。
Percentage of Pay-As-You-Go Nodes
従量課金インスタンスの最小数が満たされた後、このパーセンテージは、従量課金としてプロビジョニングする新しいインスタンスの割合を決定します。
Lowest-Cost Instance Types
使用する最低コストのインスタンスタイプの数。スポットインスタンスを作成する際、システムは指定された数のインスタンスタイプに均等に分散させます。最大値は 3 です。
Replace Preemptible Instances
スポットインスタンスの補償メカニズムを有効にするかどうかを指定します。有効にすると、システムはスポットインスタンスが回収される約 5 分前に、そのインスタンスを積極的に置き換えます。
Minimum Pay-As-You-Go Nodes in Auto Scaling Group、Percentage of Pay-As-You-Go Nodes、および Lowest-Cost Instance Types パラメーターを指定しない場合、標準のコスト最適化スケーリンググループが作成されます。それ以外の場合は、混合インスタンスポリシーを持つコスト最適化スケーリンググループが作成されます。この 2 つのタイプは、API 操作と機能の点で完全に互換性があります。
混合インスタンスポリシーを持つコスト最適化スケーリンググループの場合、ポリシーを構成して標準のコスト最適化グループの動作を複製できます。例:
従量課金インスタンスのみを作成する場合:
Minimum Pay-As-You-Go Nodes in Auto Scaling Group を 0、Percentage of Pay-As-You-Go Nodes を 100、Lowest-Cost Instance Types を 1 に設定します。
スポットインスタンスの作成を優先する場合:
Minimum Pay-As-You-Go Nodes in Auto Scaling Group を 0、Percentage of Pay-As-You-Go Nodes を 0、Lowest-Cost Instance Types を 1 に設定します。
Trigger Mode パネルの Auto Scaling の設定 セクションで、トリガーモードを選択し、そのルールを設定します。
Time-based Scaling:Hadoop クラスターのワークロードに予測可能なピークと谷がある場合、スケーリングアクティビティをスケジュールして、決まった時間に特定の数のタスクノードを追加できます。これにより、コストを節約しながらジョブの完了が保証されます。
スケーリングルールには、スケールアウトルールとスケールインルールがあります。このトピックでは、スケールアウトルールを例として説明します。クラスターのオートスケーリングを無効にすると、すべてのルールが削除されます。オートスケーリングを再度有効にする場合は、再設定する必要があります。
パラメーター
説明
ルール名
スケールアウトおよびスケールインルールを含むスケーリングルールの名前は、クラスター内で一意である必要があります。
Execution Rule
Execute Repeatedly:毎日、毎週、または毎月、特定の時間に実行するようにスケーリングアクティビティをスケジュールできます。
Execute Only Once:スケーリングアクティビティは、指定された時間に 1 回だけ実行されます。
実行時間
ルールが実行される時間。
Rule Expiration Time
ルールの有効期限の日時。
再試行タイムアウト (秒)
スケジュールされたスケーリングアクティビティは、さまざまな理由で指定された時間に実行できない場合があります。再試行タイムアウトを設定すると、システムはこの期間中に成功するまで 30 秒ごとにアクティビティを再試行します。値の範囲は 0~21,600 秒です。
例えば、スケーリングアクティビティ A が実行されるようにスケジュールされているが、別のスケーリングアクティビティ B がすでに進行中またはクールダウン期間中であるとします。この場合、アクティビティ A は実行できません。システムは、指定された再試行期間中に 30 秒ごとにアクティビティ A を再試行します。条件が満たされると、クラスターは直ちにスケーリングアクティビティを実行します。
Number of Adjusted Instances
ルールがトリガーされるたびに追加されるタスクノードの数。
Cooldown Time (s)
スケーリングアクティビティが完了した後、他のスケーリングアクティビティがトリガーされない期間。
Load-based Scaling:ビッグデータワークロードのピークと谷を正確に予測できない場合は、負荷ベースのスケーリングポリシーを使用できます。
スケーリングルールには、スケールアウトルールとスケールインルールがあります。このトピックでは、スケールアウトルールを例として説明します。オートスケーリングを無効にすると、すべてのルールが削除されます。オートスケーリングを再度有効にする場合は、再設定する必要があります。負荷ベースから時間ベースのスケーリングなど、スケーリングポリシーを切り替えると、以前のポリシーのルールは非アクティブになり、トリガーされません。ただし、これらのルールに基づいて追加されたノードは保持され、解放されません。
パラメーター
説明
ルール名
スケールアウトおよびスケールインルールを含むスケーリングルールの名前は、クラスター内で一意である必要があります。
Cluster Load Metrics
メトリックは YARN から取得されます。詳細については、Hadoop の公式ドキュメントをご参照ください。
E-MapReduce のオートスケーリングメトリックと YARN サービスのマッピングについては、「E-MapReduce のオートスケーリングメトリックと YARN のマッピング」をご参照ください。
Statistical Period
システムは、選択されたクラスター負荷メトリックが、統計期間にわたって指定された統計ルール (平均、最大、最小など) を使用して集計され、しきい値を満たしているかどうかを確認します。しきい値を満たすたびに 1 回のトリガーとしてカウントされます。
Statistical Rule
Condition Repetition Threshold
スケーリングアクティビティがトリガーされる前に、メトリックがしきい値を連続して満たす必要がある回数。
調整値
ルールがトリガーされるたびに追加されるタスクノードの数。
Cooldown Time (s)
スケーリングアクティビティが完了した後、他のスケーリングアクティビティがトリガーされない期間。システムは、この期間中に発生したトリガーを無視し、クールダウンが終了した後の次の有効なトリガーを待ちます。
Save をクリックします。
必要に応じてオートスケーリングを有効にできます。詳細については、「オートスケーリングの有効化または無効化 (Hadoop クラスターのみ)」をご参照ください。
E-MapReduce のオートスケーリングメトリックと YARN のマッピング
オートスケーリングメトリック | サービス | 説明 |
YARN.AvailableVCores | YARN | 利用可能な仮想コアの数。 |
YARN.PendingVCores | YARN | 割り当て保留中の仮想コアの数。 |
YARN.AllocatedVCores | YARN | 割り当て済みの仮想コアの数。 |
YARN.ReservedVCores | YARN | 予約済みの仮想コアの数。 |
YARN.AvailableMemory | YARN | 利用可能なメモリ量 (MB)。 |
YARN.PendingMemory | YARN | 割り当て保留中のメモリ量 (MB)。 |
YARN.AllocatedMemory | YARN | 割り当て済みのメモリ量 (MB)。 |
YARN.ReservedMemory | YARN | 予約済みのメモリ量 (MB)。 |
YARN.AppsRunning | YARN | 実行中のアプリケーションの数。 |
YARN.AppsPending | YARN | 保留中のアプリケーションの数。 |
YARN.AppsKilled | YARN | 強制終了されたアプリケーションの数。 |
YARN.AppsFailed | YARN | 失敗したアプリケーションの数。 |
YARN.AppsCompleted | YARN | 完了したアプリケーションの数。 |
YARN.AppsSubmitted | YARN | 送信されたアプリケーションの数。 |
YARN.AllocatedContainers | YARN | 割り当て済みのコンテナの数。 |
YARN.PendingContainers | YARN | 割り当て保留中のコンテナの数。 |
YARN.ReservedContainers | YARN | 予約済みのコンテナの数。 |
YARN.MemoryAvailablePercentage | YARN | 利用可能なメモリの割合 |
YARN.ContainerPendingRatio | YARN | 割り当て済みコンテナに対する保留中コンテナの比率 |