跳至内容

如何解决在使用自动终止策略时 Amazon EMR 集群不终止或提前终止的问题?

1 分钟阅读
0

我想解决在使用自动终止策略时 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 集群在使用自动终止策略时不终止或终止时间早于预期的问题,请完成以下步骤:

  1. 确认 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"
      }
    }
  2. 对于所有 Amazon EMR 版本,请确保 metrics-collector 流程正在运行。metrics-collector 流程会收集指标以确定自动终止。

    要检查 metrics-collector 进程,请运行以下命令:

    ps -ef|grep metrics-collector

    -或-

    systemctl status metricscollector.service

    有关详细信息,请参阅如何在 Amazon EMR 中重启服务?

  3. 查看 Amazon EMR 集群的 CloudWatch 指标。确保 AutoTerminationClusterIdle CloudWatch 指标在集群中显示 1。如果指标显示 1,则集群符合自动终止的条件。如果指标显示 0,则集群处于活动状态,不符合自动终止的条件。

  4. 对于早于 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
AWS 官方已更新 2 年前