我想解决在使用自动终止策略时 Amazon EMR 集群不终止或提前终止的问题。
简短描述
创建 Amazon EMR 集群时,您可以开启自动终止策略。自动终止策略会在特定的空闲时间后终止集群。
在 Amazon EMR 版本 5.34 到 5.36 和 6.4.0 或更高版本中,集群处于空闲状态的原因如下:
- YARN 应用程序未处于活动状态。
- HDFS 利用率低于 10%。
- Amazon EMR Notebook 或 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