アイドル状態を判定しEMRクラスターを自動終了出来るようになりました

2021.09.29

いわさです。

EMRのステータスが一定時間アイドル状態だったときに、EMRクラスターを自動終了出来るようになりました。

これまでは、CloudWatchメトリクスのIsIdleをチェックした上で、メトリクス以外にも様々な点を考慮した上で終了処理の判断を行う必要がありました。

There is the Amazon EMR native IsIdle Amazon CloudWatch metric, which determines the idleness of the cluster by checking whether there’s a YARN job running. However, you should consider additional metrics, such as SSH users connected or Presto jobs running, to determine whether the cluster is idle.

今回のアップデートで自前で組み込みをしなくてもアイドル状態を判定したクラスターの自動終了を設定することが出来るようになりました。

なお、EMRのバージョンによって終了判定条件は異なります。
また、非YARNジョブを実行する場合に考慮すべき点などもあります。
詳細は以下を参照してください。

とはいえ、YARNジョブの状態以外にHDFS使用率やノートブックの接続状態など様々な点も考慮してくれるのでとても良いのではないでしょうか。
本日は実際に自動終了を設定したクラスターを起動し、また既存クラスターへの設定変更の方法も確認しました。

検証用のPySparkスクリプトを実行する

確認のためにクラスター実行環境とサンプルのスクリプトとデータが必要になります。
AWSドキュメントのEMRチュートリアルにはすぐに実行できるスクリプトとデータ、手順が用意されています。すごい。

本日はこちらを使わせてもらいました。

クラスターを構築します。

用意されたデータとスクリプトを指定してステップを実行するだけです。

完了しました。
すべてのステップの終了後もクラスターが待機状態で残っています。

アイドル状態による自動終了設定

では自動終了を設定してみます。
クラスターのハードウェア構成ブロックに設定箇所が追加されています。

自動終了を有効にするかと、有効にした場合どの程度の時間をアイドル状態で経過するとクラスターを終了するかの時間を設定します。

設定可能な時間は最小が1分で最大が24時間です。
※ドキュメントでは最大7日という記述がありましたが、間違っていそう。

なお、同様に詳細設定画面にも自動終了の設定箇所が追加されています。

先程のクラスターはアイドル状態で置いておいたまま、新しいクラスターを作成しましょう。
作成時にアイドル状態での終了時間を5分で設定しました。

ステップが全て終了しました。
5分ほど待ちます。

クラスターが終了済みになりました。

既存クラスターの変更

さて、先程起動したままだった既存クラスター。
こちらにも自動終了設定を行いたいですね。

クラスター詳細画面のハードウェアタブに自動終了の設定箇所がありまして、編集することで待機中クラスターへの変更が可能です。

1分後で設定しました。

終了しましたね。
クラスター2つを終了しましたが、自動終了にともなって起動されたEC2がどうなっているのか念の為確認してみましょう。

ちゃんとインスタンス自体も終了されていますね。
良かった。

まとめ

従来までは判定と自動化の仕組みは自分で用意しなければいけませんでしたが、EMRクラスターの標準機能として組み込まれました。
従来どおりステップ終了後の自動終了機能も引き続き使うことは可能です。
今回実装されたアイドル状態判定からの自動終了機能も使ってみてください。