自動終了ポリシーを使用しても、Amazon EMR クラスターが終了しなかったり、想定よりも早く終了したりする問題を解決したいです。
簡単な説明
Amazon EMR クラスターを作成するときに、自動終了ポリシーを有効にできます。自動終了ポリシーは、特定のアイドル時間が経過するとクラスターを終了させます。
Amazon EMR バージョン 5.34 から 5.36、および 6.4.0 以降では、クラスターは次の理由でアイドル状態になります。
- YARN アプリケーションがアクティブではない。
- HDFS の使用率が 10% 未満。
- Amazon EMR ノートブックまたは EMR Studio の接続がアクティブではない。
- クラスターアプリケーションのユーザーインターフェイスが使用中ではない。
Amazon EMR バージョン 5.30.0 から 5.33.1、および 6.1.0 から 6.3.0 では、クラスターは次の理由でアイドル状態になります。
- YARN アプリケーションがアクティブではない。
- HDFS の使用率が 10% 未満。
- クラスタ Spark ジョブがアクティブではない。
解決策
自動終了ポリシーを使用しても、Amazon EMR クラスターが終了しなかったり、想定よりも早く終了したりする問題を解決するには、次のステップを実行します。
-
Amazon Elastic Compute Cloud (Amazon EC2) インスタンスプロファイルロール EMR_EC2_DefaultRole に、次のアクセス許可があることを確認します。インスタンスプロファイルロールに次のアクセス許可がない場合、クラスターはアイドルタイムアウト期間に達した後もアクティブなままになります。
{
"Version": "2012-10-17",
"Statement": {
"Sid": "AllowAutoTerminationPolicyActions",
"Effect": "Allow",
"Action": [
"elasticmapreduce:PutAutoTerminationPolicy",
"elasticmapreduce:GetAutoTerminationPolicy",
"elasticmapreduce:RemoveAutoTerminationPolicy"
],
"Resource": "your-resources"
}
}
-
すべての Amazon EMR バージョンで、metrics-collector プロセスが実行中である必要があります。metrics-collector プロセスがメトリクスを収集し、自動終了を判断します。
metrics-collector プロセスを確認するには、次のコマンドを実行します。
ps -ef|grep metrics-collector
または、
systemctl status metricscollector.service
詳細については、「Amazon EMR でサービスを再起動させる方法を教えてください」を参照してください。
-
Amazon EMR クラスターの CloudWatch メトリクスを確認します。クラスター内の AutoTerminationClusterIdle CloudWatch メトリクスが 1 であることを確認します。メトリクスが 1 の場合、クラスターは自動終了の対象です。メトリクスが 0 の場合、クラスターはアクティブであり、自動終了の対象にはなりません。
-
6.15.0 より前の Amazon EMR バージョンでは、EMR クラスターのデフォルトの Java バージョンをオーバーライドしていないかどうかを確認してください。Amazon EMR で使用されているデフォルトの Java バージョンをオーバーライドすると、自動終了は想定どおりに動作しません。
この問題を解決するには、次のスクリプトを、実行中のクラスターのプライマリインスタンスで、または新しいクラスターのブートストラップアクションとして実行します。
#Change EMR daemon startup scripts to use JDK8
sudo sed -i 's#$JAVA_HOME#/usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre#g' /usr/bin/logpusher
sudo sed -i 's#$JAVA_HOME#/usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre#g' /usr/bin/instance-controller
sudo sed -i 's#/usr/bin/java#/usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java#g' /usr/bin/metricscollector
#Restart the daemons
sudo systemctl restart instance-controller
sudo systemctl restart logpusher
sudo systemctl restart metricscollector.service