■ はじめに
Amazon EMR の 自動スケーリングについて、不勉強なので 調べてまとめた
目次
【0】EMRの スケーリング方法 1)使用上の注意 2)比較 3)使い分け 【1】EMR-managed scaling 1)使用上の注意 【2】Custom automatic scaling policy 1)使用上の注意 2)使用するメトリクス 3)設定手順 【3】自動スケーリングポリシーのイベント 1)PENDING(待ち状態) 2)ATTACHED(スケーリングしている) 3)DETACHED(スケーリング解除) 4)FAILED(失敗) 【4】GUIでの確認について 1)設定の確認 2)EMRの各種イベントの確認 【5】トラブルシューティング 1)トラブル実例 2)切り分けのヒント : aws emr describe-cluster 【6】補足:用語整理 1)スケールアウト(Scale out) 2)スケールイン(Scale in)
【0】EMRの スケーリング方法
https://aws.amazon.com/jp/premiumsupport/knowledge-center/auto-scaling-in-amazon-emr/
https://aws.amazon.com/jp/blogs/news/introducing-amazon-emr-managed-scaling-automatically-resize-clusters-to-lower-cost/
にある通り、クラスターをスケーリングするのに 以下の 2 つの方法を提供している。 【1】EMR-managed scaling(EMR マネージドスケーリング) 【2】Custom automatic scaling policy(カスタム自動スケーリング)
1)使用上の注意
[1] マスターノード数を、スケーリングできない => スケーリングするのは、クラスター内の「コアノード」と「タスクノード」のみ [2] インスタンスグループの「再設定」と「サイズ変更」を同時に行えない => インスタンスグループのサイズ変更中に再設定を開始した場合、 インスタンスグループのサイズ変更が完了するまで 再設定を開始することはできない その逆も同様。
2)比較
https://aws.amazon.com/jp/blogs/news/introducing-amazon-emr-managed-scaling-automatically-resize-clusters-to-lower-cost/
https://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-scale-on-demand.html
より一部抜粋
- | EMR-managed scaling | Custom scaling |
---|---|---|
ポリシーとルール | 不要 | ポリシーとルールを定義/管理する必要がある |
サポートしているるクラスタタイプ | インスタンスグループ/インスタンスフリート | インスタンスグループのみ |
設定の粒度 | クラスターレベルの最小/最大制約 | インスタンスグループのみ |
サポートしているEMR version | 5.30+ (ただし6.0.0除く) | 4.0+ |
メトリクス収集頻度 | 1 ~ 5 秒ごと | 5 分ごと |
評価頻度 | 5 ~ 10 秒ごと | 5 分ごと |
3)使い分け
* 基本的には、「【1】EMR-managed scaling」でいいのかなっと思う (理由は後述「【1】EMR-managed scaling」に記載)が、 以下により異なる + 使用しているEMRバージョン(古すぎてたら、どっちも使えない)
【1】EMR-managed scaling
* EMR マネージドスケーリング * EMR マネージドスケーリングを有効にすると、 ワークロードに基づいてクラスター内のインスタンス/ユニット数を 自動的に増減する
個人的な意見
* 面倒な設定(ポリシー)も不要なので管理コストを軽減できるし、 評価頻度も細かくできるので、設計する際は、 「【1】EMR-managed scaling」ベースに考えればよさそう
1)使用上の注意
* EMR5.30.0 / 6.1.0 以上(未満だと使えない)
【2】Custom automatic scaling policy
* カスタム自動スケーリング * インスタンスグループのカスタムポリシーで自動スケーリングを使用
1)使用上の注意
* EMR5.30.0 / 6.1.0 以上(未満だと使えない)
https://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-automatic-scaling.html
より抜粋 ~~~~~~ (i) 注記 Amazon EMR でカスタムポリシー機能による自動スケーリングを使用するには、 クラスターの作成時に VisibleToAllUsers パラメータに true を設定する必要があります。 詳細については、「SetVisibleToAllUsers」を参照してください。 ~~~~~~
SetVisibleToAllUsers
https://docs.aws.amazon.com/ja_jp/emr/latest/APIReference/API_SetVisibleToAllUsers.html
2)使用するメトリクス
* 自動スケーリングで一般的に使用されるメトリクスは以下の通り。
[a] YarnMemoryAvailablePercentage
* YARN で使用可能な残りメモリの割合(%)
[b] ContainerPendingRatio
* 「保留中のコンテナ」と「割り当てられたコンテナ」の比率
3)設定手順
* 以下の公式ドキュメントを見るといいかも。
https://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-automatic-scaling.html
~~~~~ [1] 自動スケーリングの IAM ロールを作成する [2] 自動スケーリングルール作成・設定 ~~~~~
[1] 自動スケーリングの IAM ロールを作成する
https://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-automatic-scaling.html#emr-automatic-scaling-iam-role
より ~~~~~ * Amazon EMR での自動スケーリングには、 スケーリングアクティビティがトリガーされたときに インスタンスを追加および削除する権限がある IAM ロールが必要 => デフォルトロールである EMR_AutoScaling_DefaultRole は、 適切なロールポリシーと信頼ポリシーで設定されており、 この目的に使用できる * スケーリングポリシーを持つクラスターを最初に作成するとき、 Amazon EMR はデフォルトのロールを作成し、 アクセス許可に必要なデフォルトの管理ポリシー AmazonElasticMapReduceforAutoScalingRole をアタッチ ~~~~~
[2] 自動スケーリングルール作成・設定
* 以下の公式ドキュメントを参照(イメージも載っている)
【3】自動スケーリングポリシーのイベント
より、以下のイベント(状態)がある 1)PENDING(待ち状態) 2)ATTACHED(スケーリングしている) 3)DETACHED(スケーリング解除) 4)FAILED(失敗)
1)PENDING(待ち状態)
* ポリシーのアタッチメントを保留している状態
2)ATTACHED(スケーリングしている)
* Amazon EMR クラスター ClusterId (clusterName) 内の インスタンスグループ InstanceGroupID の Auto Scaling ポリシーが アタッチした状態
3)DETACHED(スケーリング解除)
* Amazon EMR クラスター ClusterId (clusterName) 内の インスタンスグループ InstanceGroupID の Auto Scaling ポリシーが デタッチした状態
4)FAILED(失敗)
* Amazon EMR クラスター ClusterId (clusterName) 内の インスタンスグループ InstanceGroupID の Auto Scaling ポリシーは、 アタッチ/でタッチできずに失敗した状態
【4】GUIでの確認について
1)設定の確認
* 以下の確認可能 ~~~~ [1] AWS Managementコンソールで、[EMR]-[Clusters]で 確認対象クラスターを選択する [2] [Hardware]タブを選択すると 「Cluster Scaling Policy」欄配下で確認できる ~~~~ * 上記のAWS Managementコンソール画面上から クラスターのスケーリング設定の変更が可能。
「Edit」ボタン押下
* 「Cluster Scaling」で「Enable Cluster Scaing」チェックボタンにより クラスターのスケーリング設定の有効/無効を切り替え可能 => 編集を反映するには、「Save」ボタン押下を忘れずに、、、
「ペンアイコン」押下
* 設定した自動スケーリングのパラメータを編集可能
2)EMRの各種イベントの確認
* 以下の確認可能 ~~~~ [1] AWS Managementコンソールで、[EMR]-[Clusters]で 確認対象クラスターを選択する [2] [Events]タブを選択すると、イベントが表になって確認できる ~~~~ * EMRのイベント全体を確認したい場合は、以下の通り ~~~~ [1] AWS Managementコンソールで、[EMR]-[Events]を選択する => フィルタリングも可能 ~~~~
【5】トラブルシューティング
* 以下の公式ドキュメントが役に立ちそう
https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/CHAP_Troubleshooting.html
1)トラブル実例
* 以下の関連記事を参照のこと => ちなみに上記の公式ドキュメントは、あまり役に立たなかった、、、
EMRで Auto Scaling が FAILED する
https://dk521123.hatenablog.com/entry/2022/05/18/092046
2)切り分けのヒント : aws emr describe-cluster
* このコマンド出力結果を元に後述「1)トラブル実例」を解決した * このコマンド以外のEMRのAWS CLI は、以下の公式ドキュメントを参照。
https://docs.aws.amazon.com/cli/latest/reference/emr/index.html
aws emr describe-cluster コマンド
https://docs.aws.amazon.com/cli/latest/reference/emr/describe-cluster.html
* クラスターレベルの詳細を表示する + ステータス + ハードウェア・ソフトウェアの設定 + VPC 設定 + ブートストラップアクション + インスタンスグループ * 以下の公式ドキュメントもみておくといいかも。
https://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-manage-view-clusters.html
【6】補足:用語整理
「スケールイン」「スケールアウト」が どっちでどっちだってなるので、整理。
1)スケールアウト(Scale out)
* サーバ台数を増やすこと => 処理分散して処理効率は上がるが、コストも上がる
2)スケールイン(Scale in)
* サーバ台数を減らすこと(「スケールアウト」の逆)
cf. スケールダウン(Scale down)
* サーバのグレード(CPUなど)を落とすこと
関連記事
Amazon EMR ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/02/20/230519
Amazon EMR ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/05/27/175610
Amazon EMR ~IAM Role周り ~
https://dk521123.hatenablog.com/entry/2023/07/24/160124
EMRで Auto Scaling が FAILED する
https://dk521123.hatenablog.com/entry/2022/05/18/092046