

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Amazon EMR 集群执行工作时查看和监控
<a name="emr-manage-view"></a>

Amazon EMR 提供多种工具，供您收集集群信息。您可以从控制台、CLI 或者以编程的方式访问有关集群的信息。主节点上提供标准的 Hadoop Web 界面和日志文件。您还可以使用监控服务（例如 CloudWatch 和 Ganglia）来跟踪集群的性能。

从 Amazon EMR 5.25.0 开始，也可以使用适用 UIs 于 Spark History Server 的 “持久” 应用程序从控制台获取应用程序历史记录。借助 Amazon EMR 6.x，持久性 YARN 时间线服务器和 Tez 用户界面也可用。这些服务是在集群外托管的，因此您可以在集群终止后的 30 天内访问应用程序历史记录，而无需 SSH 连接或 Web 代理。请参阅[查看应用程序历史记录](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-cluster-application-history.html)。

**Topics**
+ [查看 Amazon EMR 集群状态和详细信息](emr-manage-view-clusters.md)
+ [使用 Amazon EMR 增强步骤调试](emr-enhanced-step-debugging.md)
+ [查看 Amazon EMR 应用程序历史记录](emr-cluster-application-history.md)
+ [查看 Amazon EMR 日志文件](emr-manage-view-web-log-files.md)
+ [查看 Amazon EC2 中的集群实例](UsingEMR_Tagging.md)
+ [CloudWatch 来自 Amazon EMR 的事件和指标](emr-manage-cluster-cloudwatch.md)
+ [将 Ganglia 与 Amazon EMR 结合使用查看集群应用程序指标](ViewingGangliaMetrics.md)
+ [使用记录 AWS EMR API 调用 AWS CloudTrail](logging-using-cloudtrail.md)
+ [EMR Observability 最佳实践](emr-metrics-observability.md)

# 查看 Amazon EMR 集群状态和详细信息
<a name="emr-manage-view-clusters"></a>

创建集群后，您可以监控其状态和获取有关其执行和可能发生的错误的详细信息 (即使在集群终止后也是如此)。Amazon EMR 会将有关已终止集群的元数据保存两个月，供您参考，之后元数据将被删除。虽然您无法从集群历史记录中删除集群，但借助 AWS 管理控制台，您可使用 **Filter (筛选条件)** 来聚焦您关注的集群，而借助 AWS CLI，您可使用选项与 `list-clusters` 命令来聚焦您关注的集群。

无论集群是在运行中还是已终止，您都可以访问从开始记录集群的一周内存储在集群中的应用程序历史记录。此外，在集群终止后，持久性应用程序用户界面会在集群外存储应用程序历史记录达 30 天。请参阅[查看应用程序历史记录](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-cluster-application-history.html)。

有关集群状态 [例如“Waiting (正在等待)”和“Running (正在运行)”] 的更多信息，请参阅[了解集群的生命周期](emr-overview.md#emr-overview-cluster-lifecycle)。

## 使用查看集群详细信息 AWS 管理控制台
<a name="emr-view-cluster-console"></a>

[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) 中的**集群**列表列出了您的账户和 AWS 区域中的所有集群，包括已终止的集群。该列表显示了每个集群的以下信息：**名称**和 **ID**、**状态**和**状态详细信息**、**创建时间**、集群已运行的**已用时间**，以及集群中所有 EC2 实例累计的**标准实例小时数**。该列表是监控您的集群状态的起点，它旨在使您能够深入了解每个集群的详细信息以进行分析和故障排除。

------
#### [ Console ]

**使用控制台查看集群信息**

1. [登录 AWS 管理控制台，然后在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/emr)

1. 在左侧导航窗格中的 **EMR on EC2** 下，选择 **Clusters**（集群），然后选择要查看的集群。

1. 使用 **Summary**（摘要）面板查看集群配置的基本信息，例如集群状态、Amazon EMR 在集群上安装的开源应用程序以及您用于创建集群的 Amazon EMR 版本。使用“摘要”下的各个选项卡查看信息，如下表所述。

------

## 使用查看集群详细信息 AWS CLI
<a name="view-cluser-cli"></a>

以下示例说明如何使用 AWS CLI检索集群详细信息。有关可用命令的更多信息，请参阅 [Amazon EMR 的AWS CLI 命令参考](https://docs.aws.amazon.com/cli/latest/reference/emr)。您可以使用 [describe-cluster](https://docs.aws.amazon.com/cli/latest/reference/emr/describe-cluster.html) 命令查看集群级别详细信息，包括状态、硬件和软件配置、VPC 设置、引导操作、实例组等。有关集群状态的更多信息，请参阅[了解集群的生命周期](emr-overview.md#emr-overview-cluster-lifecycle)。以下示例演示了使用 `describe-cluster` 命令的情景，并随后提供了 [list-clusters](https://docs.aws.amazon.com/cli/latest/reference/emr/describe-cluster.html) 命令的示例。

**Example 查看集群状态**  
要使用 `describe-cluster` 命令，需要集群 ID。此示例演示了使用获取在特定日期范围内创建的集群的列表，然后使用 IDs 返回的集群之一来列出有关单个集群状态的更多信息。  
以下命令描述了集群*j-1K48XXXXXXHCB*，您可以将其替换为集群 ID。  

```
aws emr describe-cluster --cluster-id j-1K48XXXXXXHCB
```
您的命令的输出与以下内容类似：  

```
{
    "Cluster": {
        "Status": {
            "Timeline": {
                "ReadyDateTime": 1438281058.061, 
                "CreationDateTime": 1438280702.498
            }, 
            "State": "WAITING", 
            "StateChangeReason": {
                "Message": "Waiting for steps to run"
            }
        }, 
        "Ec2InstanceAttributes": {
            "EmrManagedMasterSecurityGroup": "sg-cXXXXX0", 
            "IamInstanceProfile": "EMR_EC2_DefaultRole", 
            "Ec2KeyName": "myKey", 
            "Ec2AvailabilityZone": "us-east-1c", 
            "EmrManagedSlaveSecurityGroup": "sg-example"
        }, 
        "Name": "Development Cluster", 
        "ServiceRole": "EMR_DefaultRole", 
        "Tags": [], 
        "TerminationProtected": false, 
        "ReleaseLabel": "emr-4.0.0", 
        "NormalizedInstanceHours": 16, 
        "InstanceGroups": [
            {
                "RequestedInstanceCount": 1, 
                "Status": {
                    "Timeline": {
                        "ReadyDateTime": 1438281058.101, 
                        "CreationDateTime": 1438280702.499
                    }, 
                    "State": "RUNNING", 
                    "StateChangeReason": {
                        "Message": ""
                    }
                }, 
                "Name": "CORE", 
                "InstanceGroupType": "CORE", 
                "Id": "ig-2EEXAMPLEXXP", 
                "Configurations": [], 
                "InstanceType": "m5.xlarge", 
                "Market": "ON_DEMAND", 
                "RunningInstanceCount": 1
            }, 
            {
                "RequestedInstanceCount": 1, 
                "Status": {
                    "Timeline": {
                        "ReadyDateTime": 1438281023.879, 
                        "CreationDateTime": 1438280702.499
                    }, 
                    "State": "RUNNING", 
                    "StateChangeReason": {
                        "Message": ""
                    }
                }, 
                "Name": "MASTER", 
                "InstanceGroupType": "MASTER", 
                "Id": "ig-2A1234567XP", 
                "Configurations": [], 
                "InstanceType": "m5.xlarge", 
                "Market": "ON_DEMAND", 
                "RunningInstanceCount": 1
            }
        ], 
        "Applications": [
            {
                "Version": "1.0.0", 
                "Name": "Hive"
            }, 
            {
                "Version": "2.6.0", 
                "Name": "Hadoop"
            }, 
            {
                "Version": "0.14.0", 
                "Name": "Pig"
            }, 
            {
                "Version": "1.4.1", 
                "Name": "Spark"
            }
        ], 
        "BootstrapActions": [], 
        "MasterPublicDnsName": "ec2-X-X-X-X.compute-1.amazonaws.com", 
        "AutoTerminate": false, 
        "Id": "j-jobFlowID", 
        "Configurations": [
            {
                "Properties": {
                    "hadoop.security.groups.cache.secs": "250"
                }, 
                "Classification": "core-site"
            }, 
            {
                "Properties": {
                    "mapreduce.tasktracker.reduce.tasks.maximum": "5", 
                    "mapred.tasktracker.map.tasks.maximum": "2", 
                    "mapreduce.map.sort.spill.percent": "90"
                }, 
                "Classification": "mapred-site"
            }, 
            {
                "Properties": {
                    "hive.join.emit.interval": "1000", 
                    "hive.merge.mapfiles": "true"
                }, 
                "Classification": "hive-site"
            }
        ]
    }
}
```

**Example 按创建日期列出集群**  
要检索特定日期范围内创建的集群，请使用 `list-clusters` 命令与 `--created-after` 和 `--created-before` 参数。  
以下命令将列出在 2019 年 10 月 9 日和 2019 年 10 月 12 日之间创建的所有集群。  

```
aws emr list-clusters --created-after 2019-10-09T00:12:00 --created-before 2019-10-12T00:12:00
```

**Example 按状态列出集群**  
要按状态列出集群，使用 `list-clusters` 命令与 `--cluster-states` 参数。有效集群状态包括：STARTING、BOOTSTRAPPING、RUNNING、WAITING、TERMINATING、TERMINATED 和 TERMINATED\$1WITH\$1ERRORS。  

```
aws emr list-clusters --cluster-states TERMINATED
```
您还可使用以下快捷方式参数来列出处于指定状态的所有集群：  
+ `--active` 筛选处于 STARTING、BOOTSTRAPPING、RUNNING、WAITING 或 TERMINATING 状态的集群。
+ `--terminated` 筛选处于 TERMINATED 状态的集群。
+ `--failed` 参数筛选处于 TERMINATED\$1WITH\$1ERRORS 状态的集群。
以下命令返回相同的结果。  

```
aws emr list-clusters --cluster-states TERMINATED
```

```
aws emr list-clusters --terminated
```
有关集群状态的更多信息，请参阅[了解集群的生命周期](emr-overview.md#emr-overview-cluster-lifecycle)。

# 使用 Amazon EMR 增强步骤调试
<a name="emr-enhanced-step-debugging"></a>

如果 Amazon EMR 步骤失败，并且您通过 5.x 版或更高版本的 AMI 使用步骤 API 操作提交了工作，则 Amazon EMR 可以在某些情况下通过 API 确定并返回步骤失败的根本原因，以及相关日志文件的名称和部分应用程序堆栈跟踪。例如，可以确定以下失败：
+ 常见 Hadoop 错误，例如输出目录已经存在、输入内容不存在，或应用程序用尽内存。
+ Java 错误，例如用不兼容的 Java 版本编译了应用程序，或用找不到的主类运行。
+ 访问在 Amazon S3 中存储的对象时发生问题。

此信息可通过[DescribeStep](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/API_DescribeStep.html)和 [ListSteps](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/API_ListSteps.html)API 操作获得。这些操作[StepSummary](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/API_StepSummary.html)返回的[FailureDetails](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/API_FailureDetails.html)字段。要访问 FailureDetails 信息，请使用 AWS CLI、控制台或 AWS SDK。

------
#### [ Console ]

Amazon EMR 新控制台不提供步骤调试。但是，您可以通过以下步骤查看集群终止详细信息。

**使用控制台查看失败详细信息**

1. [登录 AWS 管理控制台，然后在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/emr)

1. 在左侧导航窗格中的 **EMR on EC2** 下，选择 **Clusters**（集群），然后选择要查看的集群。

1. 记下显示在集群详细信息页面上 **Summary**（摘要）部分中的 **Status**（状态）值。如果状态为 **Terminated with errors**（因错误而终止），请将鼠标悬停在文本上以查看集群失败详细信息。

------
#### [ CLI ]

**要查看失败详情，请使用 AWS CLI**
+ 要获取某个步骤的失败详细信息 AWS CLI，请使用`describe-step`命令。

  ```
  aws emr describe-step --cluster-id j-1K48XXXXXHCB --step-id s-3QM0XXXXXM1W
  ```

  输出将类似如下：

  ```
  {
    "Step": {
      "Status": {
        "FailureDetails": {
          "LogFile": "s3://amzn-s3-demo-bucket/logs/j-1K48XXXXXHCB/steps/s-3QM0XXXXXM1W/stderr.gz",
          "Message": "org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory s3://amzn-s3-demo-bucket/logs/beta already exists",
          "Reason": "Output directory already exists."
        },
        "Timeline": {
          "EndDateTime": 1469034209.143,
          "CreationDateTime": 1469033847.105,
          "StartDateTime": 1469034202.881
        },
        "State": "FAILED",
        "StateChangeReason": {}
      },
      "Config": {
        "Args": [
          "wordcount",
          "s3://amzn-s3-demo-bucket/input/input.txt",
          "s3://amzn-s3-demo-bucket/logs/beta"
        ],
        "Jar": "s3://amzn-s3-demo-bucket/jars/hadoop-mapreduce-examples-2.7.2-amzn-1.jar",
        "Properties": {}
      },
      "Id": "s-3QM0XXXXXM1W",
      "ActionOnFailure": "CONTINUE",
      "Name": "ExampleJob"
    }
  }
  ```

------

# 查看 Amazon EMR 应用程序历史记录
<a name="emr-cluster-application-history"></a>

您可以在控制台中使用集群详细信息页面查看 Spark 历史记录服务器和 YARN 时间线服务应用程序的详细信息。Amazon EMR 应用程序历史记录可让您更轻松地对活动的任务和任务历史记录进行故障排除和分析。

**注意**  
为了增强可能与 Amazon EMR 结合使用的非控制台应用程序的安全性，应用程序托管域已在公共后缀列表（PSL）中注册。这些托管域的示例包括以下各项：`emrstudio-prod.us-east-1.amazonaws.com`、`emrnotebooks-prod.us-east-1.amazonaws.com`、`emrappui-prod.us-east-1.amazonaws.com`。为进一步增强安全性，如果您需要在默认域名中设置敏感 Cookie，我们建议您使用带 `__Host-` 前缀的 Cookie。这将有助于保护您的域，防范跨站点请求伪造（CSRF）攻击。有关更多信息，请参阅 *Mozilla 开发者网络*中的 [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) 页面。

**Applications**（应用程序）选项卡的 **Application user interfaces**（应用程序用户界面）部分提供多个查看选项，具体取决于集群状态和您在集群上安装的应用程序。
+ [集群外访问持久性应用程序用户界面](https://docs.aws.amazon.com/emr/latest/ManagementGuide/app-history-spark-UI.html)：从 Amazon EMR 版本 5.25.0 开始，Spark UI 和 Spark 历史记录服务器可以使用持久性应用程序用户界面链接。对于 Amazon EMR 版本 5.30.1 及更高版本，Tez UI 和 YARN 时间线服务器也具有持久性应用程序用户界面。YARN 时间线服务器和 Tez UI 是开源应用程序，可提供适用于活动的和已终止的集群的指标。Spark 用户界面提供有关计划程序阶段和任务、RDD 大小和内存使用情况的详细信息、环境信息以及有关正在运行的执行程序的信息。永久性应用程序 UIs 在集群外运行，因此集群信息和日志在应用程序终止后的 30 天内可用。与集群上的应用程序用户界面不同，永久性应用程序 UIs 不需要您通过 SSH 连接设置 Web 代理。
+ [集群上的应用程序用户界面](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-web-interfaces.html)：可以在集群上运行的应用程序历史记录用户界面各种各样。集群上的用户界面托管在主节点上，并要求您设置到 Web 服务器的 SSH 连接。应用程序终止后，集群上的应用程序用户界面将应用程序历史记录保留一周。有关设置 SSH 隧道的更多信息和说明，请参阅[查看 Amazon EMR 集群上托管的 Web 界面](emr-web-interfaces.md)。

  除了 Spark 历史记录服务器、YARN 时间线服务器和 Hive 应用程序之外，只能在集群运行时查看集群上的应用程序历史记录。

# 在 Amazon EMR 中查看持久性应用程序用户界面
<a name="app-history-spark-UI"></a>

从 Amazon EMR 版本 5.25.0 开始，您可以使用集群的 **Summary (摘要)** 页面或控制台中的 **Application user interfaces (应用程序用户界面)** 选项卡连接到在集群外托管的持久性 Spark 历史记录服务器应用程序的详细信息。从 Amazon EMR 版本 5.30.1 开始，提供了 Tez UI 和 YARN 时间线服务器持久性应用程序界面。对持久性应用程序历史记录的一键式链接访问提供了以下好处：
+ 您可以快速分析活动的作业和作业历史记录并进行故障排除，而无需通过 SSH 连接来设置 Web 代理。
+ 您可以访问处于活动状态和终止状态的集群的应用程序历史记录和相关日志文件。日志在应用程序结束后的 30 天内均可用。

在控制台中导航到您的集群详细信息，选择**应用程序**选项卡。集群启动后，选择您想要的应用程序 UI。应用程序 UI 将在新的浏览器选项卡中打开。有关更多信息，请参阅[监控和检测](https://spark.apache.org/docs/latest/monitoring.html)。

您可以通过 Spark 历史记录服务器、YARN 时间线服务器和 Tez UI 上的链接来查看 YARN 容器日志。

**注意**  
要从 Spark 历史记录服务器、YARN 时间线服务器和 Tez UI 访问 YARN 容器日志，您必须为集群启用 Amazon S3 日志记录。如果未启用日志记录，则指向 YARN 容器日志的链接将不起作用。

## 日志收集
<a name="app-history-spark-UI-event-logs"></a>

要启用一键式访问持久性应用程序用户界面，Amazon EMR 需要收集两种类型的日志：
+ **应用程序事件日志** 会收集到 EMR 系统存储桶中。通过使用 Amazon S3 托管密钥的服务器端加密 (SSE-S3) 对事件日志进行静态加密。如果您为集群使用私有子网，请确保 ARNs 在私有子网的 Amazon S3 策略的资源列表中包含正确的系统存储桶。有关更多信息，请参阅[私有子网的最小 Amazon S3 策略](https://docs.aws.amazon.com/emr/latest/ManagementGuide/private-subnet-iampolicy.html)。
+ **YARN 容量日志**收集到您拥有的 Amazon S3 存储桶中。您必须为集群启用日志记录才能访问 YARN 容器日志。有关更多信息，请参阅[配置集群日志记录和调试](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-debugging.html)。

如果您出于隐私原因需要禁用此功能，则可在创建集群时使用引导脚本来停止守护程序，如以下示例所示。

```
aws emr create-cluster --name "Stop Application UI Support" --release-label emr-7.12.0 \
--applications Name=Hadoop Name=Spark --ec2-attributes KeyName=<myEMRKeyPairName> \
--instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=TASK,InstanceCount=1,InstanceType=m3.xlarge \
--use-default-roles --bootstrap-actions Path=s3://region.elasticmapreduce/bootstrap-actions/run-if,Args=["instance.isMaster=true","echo Stop Application UI | sudo tee /etc/apppusher/run-apppusher; sudo systemctl stop apppusher || exit 0"]
```

运行此引导启动脚本后，Amazon EMR 不会将任何 Spark 历史记录服务器或 YARN 时间线服务器事件日志收集到 EMR 系统存储桶中。**Application user interfaces (应用程序用户界面)** 选项卡上没有可用的应用程序历史记录信息，并且您将不再能够从控制台访问所有应用程序用户界面。

## 大型 Spark 事件日志文件
<a name="app-history-spark-UI-large-event-logs"></a>

在某些情况下，长时间运行的 Spark 作业（例如 Spark 流式处理）和大型作业（例如 Spark SQL 查询）可能会生成大型事件日志。使用大型事件日志，您可以快速耗尽计算实例上的磁盘空间，并在加载 Persistent 时遇到`OutOfMemory`错误 UIs。要避免这些问题，建议您启用 Spark 事件日志滚动和压缩功能。此功能在 Amazon EMR 版本 emr-6.1.0 及更高版本上可用。有关滚动和压缩的更多详细信息，请参阅 Spark 文档中的[对滚动事件日志文件应用压缩](https://spark.apache.org/docs/latest/monitoring.html#applying-compaction-on-rolling-event-log-files)。

要激活 Spark 事件日志滚动和压缩功能，请启用以下 Spark 配置设置。
+ `spark.eventLog.rolling.enabled`：根据大小启用事件日志滚动。默认情况下，此设置处于禁用状态。
+ `spark.eventLog.rolling.maxFileSize`：激活滚动时，指定事件日志文件在滚动之前的最大大小。默认值为 128 MB。
+ `spark.history.fs.eventLog.rolling.maxFilesToRetain`：指定要保留的非压缩事件日志文件的最大数量。默认情况下，会保留所有事件日志文件。设置为较小的数字以压缩较旧的事件日志。最小值为 1。

请注意，压缩会尝试排除具有过时事件日志文件的事件，如下所示。如果它确实丢弃了事件，则在 Spark 历史记录服务器 UI 上将看不到它们。
+ 已完成作业的事件以及相关阶段或任务事件。
+ 终止执行程序的事件。
+ 已完成 SQL 查询的事件，以及相关作业、阶段和任务事件。

**启动启用滚动和压缩的集群**

1. 使用以下配置创建 `spark-configuration.json` 文件。

   ```
   [
      {
        "Classification": "spark-defaults",
           "Properties": {
              "spark.eventLog.rolling.enabled": true,
              "spark.history.fs.eventLog.rolling.maxFilesToRetain": 1
           }
      }
   ]
   ```

1. 使用 Spark 滚动压缩配置创建集群，如下所示。

   ```
   aws emr create-cluster \
   --release-label emr-6.6.0 \
   --instance-type m4.large \
   --instance-count 2 \
   --use-default-roles \
   --configurations file://spark-configuration.json
   ```

## 查看持久性应用程序用户界面的权限
<a name="app-history-spark-UI-permissions"></a>

以下示例展示了访问持久性应用程序用户界面所需的角色权限。对于启用了运行时角色的集群，这将仅允许用户访问由同一用户身份和运行时角色提交的应用程序。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:CreatePersistentAppUI",
        "elasticmapreduce:DescribePersistentAppUI"
      ],
      "Resource": [
        "arn:aws:elasticmapreduce:*:123456789012:cluster/clusterId"
      ],
      "Sid": "AllowELASTICMAPREDUCECreatepersistentappui"
    },
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:GetPersistentAppUIPresignedURL"
      ],
      "Resource": [
        "arn:aws:elasticmapreduce:*:123456789012:cluster/clusterId",
        "arn:aws:elasticmapreduce:*:123456789012:persistent-app-ui/*"
      ],
      "Condition": {
        "StringEqualsIfExists": {
          "elasticmapreduce:ExecutionRoleArn": [
            "arn:aws:iam::123456789012:role/executionRoleArn"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEGetpersistentappuipresignedurl"
    }
  ]
}
```

------

以下示例展示了针对启用了运行时角色的集群移除在持久性应用程序用户界面中查看应用程序的限制所需的角色权限。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:CreatePersistentAppUI",
        "elasticmapreduce:DescribePersistentAppUI",
        "elasticmapreduce:AccessAllEventLogs"
      ],
      "Resource": [
        "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/j-XXXXXXXXXXXXX"
      ],
      "Sid": "AllowELASTICMAPREDUCECreatepersistentappui"
    },
    {
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:GetPersistentAppUIPresignedURL"
      ],
      "Resource": [
        "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/j-XXXXXXXXXXXXX",
        "arn:aws:elasticmapreduce:us-east-1:123456789012:persistent-app-ui/*"
      ],
      "Condition": {
        "StringEqualsIfExists": {
          "elasticmapreduce:ExecutionRoleArn": [
            "arn:aws:iam::123456789012:role/YourExecutionRoleName"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEGetpersistentappuipresignedurl"
    }
  ]
}
```

------

## 注意事项和限制
<a name="app-history-spark-UI-limitations"></a>

一键式访问持久性应用程序用户界面当前具有以下限制。
+ 当应用程序详细信息显示在 Spark 历史记录服务器 UI 上时，至少会有两分钟的延迟。
+ 仅当应用程序的事件日志目录位于 HDFS 中时，此功能才起作用。默认情况下，Amazon EMR 将事件日志存储在 HDFS 的目录中。如果您将默认目录更改为其它文件系统（例如 Amazon S3），则此功能将不起作用。
+ 此功能目前不适用于具有多个主节点的 EMR 集群或与 AWS Lake Formation集成的 EMR 集群。
+ 要启用一键式访问持久性应用程序用户界面，您必须有权对 Amazon EMR 执行 `CreatePersistentAppUI`、`DescribePersistentAppUI` 和 `GetPersistentAppUIPresignedURL` 操作。如果您拒绝 IAM 主体对这些操作的权限，则传播权限更改所需的时间大约为 5 分钟。
+ 如果某集群启用了运行时角色，则当通过 Persistent App UI 访问 Spark History Server 时，只有在运行时角色提交 Spark 作业后，用户才能访问 Spark 作业。
+ 如果某集群启用了运行时角色，则每个用户只能访问由同一用户身份和运行时角色提交的应用程序。
+  要针对启用了运行时角色的集群在持久性应用程序用户界面中查看所有应用程序，需要对 Amazon EMR 执行 `AccessAllEventLogs` 操作。
+ 如果在正在运行的集群中重新配置应用程序，则将无法通过应用程序 UI 获取应用程序历史记录。
+ 对于每个应用程序 AWS 账户，活动应用程序的默认限制 UIs 为 200。
+ 在下文中 AWS 区域，您可以通过 Amazon EMR 6.14.0 及更高版本 UIs 从控制台访问应用程序：
  + 亚太地区（雅加达）（ap-southeast-3）
  + 欧洲（西班牙）(eu-south-2)
  + 亚太地区（墨尔本）(ap-southeast-4)
  + 以色列（特拉维夫）（il-central-1）
  + 中东（阿联酋）(me-central-1)
+ 在下文中 AWS 区域，您可以通过 Amazon EMR 5.25.0 及更高版本 UIs 从控制台访问应用程序：
  + 美国东部（弗吉尼亚州北部）(us-east-1)
  + 美国西部（俄勒冈州）(us-west-2)
  + 亚太地区（孟买）(ap-south-1)
  + 亚太地区（首尔）(ap-northeast-2)
  + 亚太地区（新加坡）(ap-southeast-1)
  + 亚太地区（悉尼）(ap-southeast-2)
  + 亚太地区（东京）(ap-northeast-1)
  + 加拿大（中部）(ca-central-1)
  + 南美洲（圣保罗）（sa-east-1）
  + 欧洲地区（法兰克福）(eu-central-1)
  + 欧洲地区（爱尔兰）(eu-west-1)
  + 欧洲地区（伦敦）(eu-west-2)
  + 欧洲地区（巴黎）（eu-west-3）
  + 欧洲地区（斯德哥尔摩）(eu-north-1)
  + 中国（北京）（cn-north-1）
  + 中国（宁夏）（cn-northwest-1）

# 在 Amazon EMR 中查看高级应用程序历史记录
<a name="app-history-summary"></a>

**注意**  
建议您使用持久性应用程序界面来改善用户体验，应用程序历史记录可保留长达 30 天。此页面上描述的高级应用程序历史记录在新的 Amazon EMR 控制台 ([https://console.aws.amazon.com/](https://console.aws.amazon.com/emr)emr) 中不可用。有关更多信息，请参阅 [在 Amazon EMR 中查看持久性应用程序用户界面](app-history-spark-UI.md)。

对于 Amazon EMR 发行版 5.8.0 到 5.36.0 以及 6.8.0 或更低版本的 6.x 发行版，您可以从 Amazon EMR 旧控制台的 **Application user interfaces**（应用程序用户界面）选项卡查看高级别应用程序历史记录。在应用程序完成后，Amazon EMR **Application user interface**（应用程序用户界面）会将应用程序历史记录摘要保留七天。

## 注意事项和限制
<a name="app-history-limitations"></a>

当您使用旧版 Amazon EMR 控制台中的**应用程序用户界面**选项卡时，请注意以下限制。
+ 在使用 Amazon EMR 5.8.0 到 5.36.0 以及 6.8.0 或更低版本的 6.x 发行版时，您只能访问高级别应用程序历史记录功能。自 2023 年 1 月 23 日起，Amazon EMR 将停止所有版本的高级别应用程序历史记录。如果您使用 Amazon EMR 版本 5.25.0 或更高版本，我们建议您改用持久性应用程序用户界面。
+ 高级别应用程序历史记录功能不支持 Spark Streaming 应用程序。
+ 目前，具有多个主节点的 Amazon EMR 集群或与 AWS Lake Formation集成的 EMR 集群不支持一键式访问持久性的应用程序用户界面。

## 示例：查看高级别应用程序历史记录
<a name="app-history-example"></a>

以下序列演示了如何使用旧控制台集群详细信息页面上的 **Application user interfaces**（应用程序用户界面）选项卡，通过 Spark 或 YARN 应用程序深入了解任务详细信息。

要查看集群详细信息，请从 **Clusters (集群)** 列表中选择集群 **Name (名称)**。要查看有关 YARN 容器日志的信息，您必须为集群启用日志记录。有关更多信息，请参阅[配置集群日志记录和调试](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-debugging.html)。对于 Spark 应用程序历史记录，摘要表中提供的信息只是通过 Spark 历史记录服务器 UI 提供的信息的一个子集。

在 **High-level application history (高级别应用程序历史记录)** 下的 **Application user interfaces (应用程序用户界面)** 选项卡下，您可以展开一行以显示 Spark 应用程序的诊断摘要，或选择 **Application ID (应用程序 ID)** 链接以查看有关不同应用程序的详细信息。

![\[Application user interfaces tab showing persistent and on-集群 UIs, with YARN application history.\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/app-history-app.png)


当您选择 **Application ID (应用程序 ID)** 链接时，UI 会更改以显示该应用程序的 **YARN application (YARN 应用程序)** 详细信息。在 **YARN application (YARN 应用程序)** 详细信息的 **Jobs (任务)** 选项卡中，您可以选择任务的 **Description (描述)** 链接以显示该任务的详细信息。

![\[YARN application details showing job history with completed Spark tasks and their statuses.\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/app-history-job-1.png)


在任务详细信息页面上，您可以展开有关各个任务阶段的信息，然后选择 **Description (描述)** 链接以查看阶段详细信息。

![\[EMR 集群 interface showing persistent and on-集群 application UIs, with job details and stages.\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/app-history-job-2.png)


在阶段详细信息页面上，您可以查看阶段任务和执行程序的关键指标。您还可以使用 **View logs (查看日志)** 链接查看任务和执行程序日志。

![\[Application history page showing task metrics, executor details, and log access links for a Spark job.\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/images/app-history-job-3.png)


# 查看 Amazon EMR 日志文件
<a name="emr-manage-view-web-log-files"></a>

 Amazon EMR 和 Hadoop 都可以生成日志文件，报告集群上的状态。默认情况下，这些会写入 `/mnt/var/log/` 目录中的主节点。根据您在启动时如何配置集群，这些日志还可能归档到 Amazon S3，并可通过图形调试工具进行查看。

 有多种类型的日志写入主节点。Amazon EMR 会写入步骤、引导操作和实例状态日志。Apache Hadoop 写入的日志会报告作业、任务和任务尝试的处理情况。Hadoop 还会记录守护程序的日志。[有关 Hadoop 编写的日志的更多信息，请访问 http://hadoop.apache。 org/docs/stable/hadoop-project-dist/hadoop-common/ClusterSetup.html。](http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/ClusterSetup.html)

## 查看主节点上的日志文件
<a name="emr-manage-view-web-log-files-master-node"></a>

下表列出了主节点上可能显示的一些日志文件。


| 位置 | 说明 | 
| --- | --- | 
|  /emr/instance-controller/log/bootstrap-动作  | 引导操作处理期间写入的日志。 | 
|  /mnt/var/log/hadoop-state-pusher  | Hadoop 状态推送进程写入的日志。 | 
|  /emr/instance-controller/log  | 实例控制器日志。 | 
|  /emr/instance-state  | 实例状态日志。这些日志中包含有关 CPU、内存状态和节点的垃圾收集器线程的信息。 | 
|  /emr/service-nanny  | nanny 服务流程写入的日志。 | 
|  /mnt/var/log/*application*  | 特定于应用程序 (如 Hadoop、Spark 或 Hive) 的日志。 | 
|  /mnt/var/log/hadoop/steps/*N*  | 步骤日志，其中包含有关步骤处理的信息。的值*N*表示亚马逊 EMR 分配的 stepID。例如，一个集群有两个步骤：`s-1234ABCDEFGH` 和 `s-5678IJKLMNOP`。第一步位于 `/mnt/var/log/hadoop/steps/s-1234ABCDEFGH/` 中，第二步位于 `/mnt/var/log/hadoop/steps/s-5678IJKLMNOP/` 中。  Amazon EMR 写入的步骤日志如下。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/emr-manage-view-web-log-files.html)  | 

**使用 AWS CLI查看主节点上的日志文件。**

1.  如 [使用 SSH 连接到 Amazon EMR 集群主节点](emr-connect-master-node-ssh.md) 中所述使用 SSH 连接主节点。

1.  导航到您希望查看的、包含日志文件信息的目录。上表提供了一系列可用的、用户也可以搜索到的日志文件类型。以下示例演示用于导航到 ID 为 `s-1234ABCDEFGH` 的步骤日志的命令。

   ```
   cd /mnt/var/log/hadoop/steps/s-1234ABCDEFGH/
   ```

1. 使用您选择的文件查看器来查看日志文件。以下示例使用 Linux `less` 命令查看 `controller` 日志文件。

   ```
   less controller
   ```

## 查看归档到 Amazon S3 的日志文件
<a name="emr-manage-view-web-log-files-s3"></a>

默认情况下，使用控制台启动的 Amazon EMR 集群会自动将日志文件归档到 Amazon S3。您可以指定自己的日志路径，也可以允许控制台自动为您生成日志路径。对于使用 CLI 或 API 启动的集群，您必须手动配置 Amazon S3 日志归档。

 将 Amazon EMR 配置为将日志文件存档到 Amazon S3 时，它会将文件存储在您指定的 S3 位置，即/ *cluster-id* /文件夹，其中*cluster-id*是集群 ID。

下表列出了 Amazon S3 上可能显示的一些日志文件。


| 位置 | 说明 | 
| --- | --- | 
|  //node*cluster-id*/  | 节点日志，包括引导操作、实例状态和此节点的应用程序日志。每个节点的日志会存储在标有该节点的 EC2 实例标识符的文件夹中。 | 
|  //*cluster-id*node/*instance-id*/*application*  | 由每个应用程序或与应用程序关联的守护进程创建的日志。例如，Hive 服务器日志位于 `cluster-id/node/instance-id/hive/hive-server.log` 中。 | 
|  //*cluster-id*step *step-id* s//  | 步骤日志，其中包含有关步骤处理的信息。的值*step-id*表示 Amazon EMR 分配的步骤编号。例如，一个集群有两个步骤：`s-1234ABCDEFGH` 和 `s-5678IJKLMNOP`。第一步位于 `/mnt/var/log/hadoop/steps/s-1234ABCDEFGH/` 中，第二步位于 `/mnt/var/log/hadoop/steps/s-5678IJKLMNOP/` 中。  Amazon EMR 写入的步骤日志如下。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/emr-manage-view-web-log-files.html)  | 
|  /*cluster-id*/容器  |  应用程序容器日志。每个 YARN 应用程序的日志均存储在这些位置。  | 
|  //hadoop-mapred *cluster-id* uce/  | 包含有关配置详细信息和作业历史记录信息的日志。 MapReduce | 

**使用 Amazon S3 控制台查看存档到 Amazon S3 的日志文件**

1. 登录 AWS 管理控制台 并打开 Amazon S3 控制台，网址为[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 打开您在配置集群时指定的 S3 存储桶，以便将日志文件归档在 Amazon S3 中。

1. 导航到包含待显示信息的日志文件。上表提供了一系列可用的、用户也可以搜索到的日志文件类型。

1. 下载日志文件对象以进行查看。有关说明，请参阅[下载对象](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html)。

# 查看 Amazon EC2 中的集群实例
<a name="UsingEMR_Tagging"></a>

 为了帮助您管理资源，Amazon EC2 可让您将元数据以标签的形式分配给资源。每个 Amazon EC2 标签都包含一个密钥和一个值。标签可让您按各种标准 (例如用途、所有者或环境) 对 Amazon EC2 资源进行分类。

 您可以根据标签搜索和筛选资源。您通过 AWS 账户为资源分配的标签仅供您使用。共享该资源的其它账户无法查看您的标签。

Amazon EMR 会自动使用键值对标记其启动的每个 EC2 实例。这些键可标识该实例所属的集群和实例组。这可以轻松地筛选要显示的 EC2 实例，例如仅显示属于特定集群的实例，或者显示目前在任务实例组中运行的全部实例。如果您同时运行多个集群，或者管理大量的 EC2 实例，这将特别有用。

这些是 Amazon EMR 分配的预定义键值对：


| 键 | 值 | 值定义 | 
| --- | --- | --- | 
| aws:elasticmapreduce:job-flow-id |  `job-flow-identifier`  | 为其预置实例的集群的 ID。它以格式 `j-XXXXXXXXXXXXX` 显示，最长可为 256 个字符。 | 
| aws:elasticmapreduce:instance-group-role |  `group-role`  | 实例组的类型，输入为以下值之一：`master`、`core`、或 `task`。 | 

 您可以对 Amazon EMR 添加的标签进行查看和筛选。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[使用标签](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html)。因为 Amazon EMR 设置的标签都属于系统标签，无法编辑也无法删除，所以有关显示和筛选标签的部分与此内容是最相关的。

**注意**  
 Amazon EMR 在 EC2 实例的状态更新为**正在运行**时为其添加标签。如果 EC2 实例的预置时间和将其状态设置为**正在运行**的时间之间发生延迟，那么 Amazon EMR 设置的标签会在实例启动后立即显示。如果您没有看到这些标签，请等待几分钟，并刷新一下视图。

# CloudWatch 来自 Amazon EMR 的事件和指标
<a name="emr-manage-cluster-cloudwatch"></a>

使用事件和指标，以跟踪 Amazon EMR 集群的活动和运行状况。事件对于监控集群中的特定情况（如当集群状态从“starting (正在启动)”更改为“running (正在运行)”时）非常有用。指标对于监控特定的值（如 HDFS 在集群中使用的可用磁盘空间比例）非常有用。

有关 CloudWatch 活动的更多信息，请参阅 [Amazon CloudWatch 活动用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/)。有关 CloudWatch指标的更多信息，请参阅[亚马逊 CloudWatch 用户指南中的使用亚马逊 CloudWatch指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html)[*和创建亚马逊 CloudWatch*警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)。

**Topics**
+ [使用监控 Amazon EMR 指标 CloudWatch](UsingEMR_ViewingMetrics.md)
+ [使用以下方式监控 Amazon EMR 事件 CloudWatch](emr-manage-cloudwatch-events.md)
+ [回应来自亚马逊 EMR CloudWatch 的事件](emr-events-response.md)

# 使用监控 Amazon EMR 指标 CloudWatch
<a name="UsingEMR_ViewingMetrics"></a>

每五分钟更新一次，并自动收集每个 Amazon EMR 集群 CloudWatch 的指标并将其推送到每个 Amazon EMR 集群。此时间间隔是不可配置的。中报告的亚马逊 EMR 指标不收取任何费用。 CloudWatch这些五分钟的数据点指标会归档 63 天，之后数据将被丢弃。

## 如何使用 Amazon EMR 指标？
<a name="UsingEMR_ViewingMetrics_HowDoI"></a>

下表显示了 Amazon EMR 报告指标的常见用途。这些是入门建议，并不全面。有关由 Amazon EMR 报告的指标的完整列表，请参阅[亚马逊 EMR 报告的指标 CloudWatch](#UsingEMR_ViewingMetrics_MetricsReported)。


****  

| 如何？ | 相关指标 | 
| --- | --- | 
| 跟踪我的集群进展 | 查看 RunningMapTasks、RemainingMapTasks、RunningReduceTasks 和 RemainingReduceTasks 指标。 | 
| 检测处于空闲状态的集群 | IsIdle 指标可跟踪某个集群 (非当前运行任务) 是否正在实时运行。您可以设置当集群闲置达到给定时长 (例如 30 分钟) 时便可引发的警报。 | 
| 检测节点何时用尽存储空间 | MRUnhealthyNodes 指标跟踪一个或多个核心节点或任务节点何时用尽本地磁盘存储空间并转换到 UNHEALTHY YARN 状态。例如，核心节点或任务节点在磁盘中的运行空间不足，并将无法运行任务。 | 
| 检测集群何时用尽存储空间 | HDFSUtilization 指标监控集群的组合 HDFS 容量，可能需要调整集群大小以添加更多核心节点。例如，HDFS 利用率较高，这可能会影响任务和集群运行状况。 | 
| 检测集群何时以更少容量运行 | MRLostNodes 指标跟踪一个或多个核心节点或任务节点何时无法与主节点通信。例如，主节点无法访问核心节点或任务节点。 | 

有关更多信息，请参阅[Amazon EMR 集群终止并显示 NO\$1SLAVE\$1LEFT，核心节点为 FAILED\$1BY\$1MASTER](emr-cluster-NO_SLAVE_LEFT-FAILED_BY_MASTER.md)和[AWSSupport-AnalyzeEMRLogs](https://docs.aws.amazon.com//systems-manager-automation-runbooks/latest/userguide/automation-awssupport-analyzeemrlogs.html)。

## 亚马逊 EMR 的访问 CloudWatch 指标
<a name="UsingEMR_ViewingMetrics_Access"></a>

您可以使用亚马逊 EMR 控制台或控制台查看 A CloudWatch mazon EMR 报告的指标。CloudWatch 您也可以使用 CloudWatch CLI 命令`[mon-get-stats](https://docs.aws.amazon.com/AmazonCloudWatch/latest/cli/cli-mon-get-stats.html)`或 CloudWatch `[GetMetricStatistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html)` API 检索指标。有关 CloudWatch使用查看或检索 Amazon EMR 指标的更多信息，请参阅[ CloudWatch 亚马逊用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/)。

------
#### [ Console ]

**使用控制台查看指标**

1. [登录 AWS 管理控制台，然后在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/emr)

1. 在左侧导航窗格中的 **EMR on EC2** 下，选择 **Clusters**（集群），然后选择要查看指标的集群。集群详细信息页面随即打开。

1. 在集群详细信息页面上选择 **Monitoring**（监控）选项卡。选择 **Cluster Status**（集群状态）、**Node Status**（节点状态）或 **Inputs and outputs**（输入和输出）选项中的任何一个，以加载有关集群进度和运行状况的报告。

1. 选择要查看的指标之后，您可以放大每个图表。要筛选图表的时间范围，请选择预填选项或选择 **Custom**（自定义）。

------

## 亚马逊 EMR 报告的指标 CloudWatch
<a name="UsingEMR_ViewingMetrics_MetricsReported"></a>

下表列出了 Amazon EMR 在控制台中报告并推送到的指标。CloudWatch

### Amazon EMR 指标
<a name="emr-metrics-reported"></a>

Amazon EMR 将多个指标的数据发送到。 CloudWatch所有 Amazon EMR 集群会以五分钟的间隔自动发送指标。指标会存档两周。两周后，数据会被丢弃。

`AWS/ElasticMapReduce` 命名空间包括以下指标。

**注意**  
Amazon EMR 从集群中提取指标。如果无法连接到集群，则在此集群再次变成可用状态之前，EMR 将不会报告任何指标。

以下指标适用于 Hadoop 2.x 版本上运行的集群。


| 指标 | 说明 | 
| --- | --- | 
| 集群状态 | 
| IsIdle  | 指示集群不再执行任务，但仍处于活动状态并会产生费用。如果没有任何任务和任务处于运行状态，则此指标设置为 1；否则设置为 0。系统每隔五分钟检查一次该值，值为 1 仅表示在检查时集群处于空闲状态，并不表示它整个五分钟内都处于空闲状态。为避免误报，当多次连续 5 分钟检查获得的值均为 1 时，您应提出警报。例如，当该值在三十分钟或更长时间内都为 1 时，您应提出警报。 使用案例：监控集群性能 单位：*布尔值*  | 
| ContainerAllocated  | 分配的资源容器数量ResourceManager。 使用案例：监控集群进度 单位：*计数*  | 
| ContainerReserved  | 预留的容器数。 使用案例：监控集群进度 单位：*计数*  | 
| ContainerPending  | 队列中尚未分配的容器数。 使用案例：监控集群进度 单位：*计数*  | 
| ContainerPendingRatio  | 待处理容器与已分配容器的比率 (ContainerPendingRatio = ContainerPending / ContainerAllocated)。如果 ContainerAllocated = 0，则为 ContainerPendingRatio = ContainerPending。的值 ContainerPendingRatio 代表数字，而不是百分比。此值对基于容器分配行为扩展集群资源很有用。 单位：*计数*  | 
| AppsCompleted  | 提交给 YARN 并且已完成的应用程序数。 使用案例：监控集群进度 单位：*计数*  | 
| AppsFailed  | 提交给 YARN 并且未能完成的应用程序数。 使用案例：监控集群进度，监控集群运行状况 单位：*计数*  | 
| AppsKilled  | 提交给 YARN 并且已终止的应用程序数。 使用案例：监控集群进度，监控集群运行状况 单位：*计数*  | 
| AppsPending  | 提交给 YARN 并且处于挂起状态的应用程序数。 使用案例：监控集群进度 单位：*计数*  | 
| AppsRunning  | 提交给 YARN 并且正在运行的应用程序数。 使用案例：监控集群进度 单位：*计数*  | 
| AppsSubmitted  | 提交给 YARN 的应用程序数。 使用案例：监控集群进度 单位：*计数*  | 
| 节点状态 | 
| CoreNodesRunning  | 处于运行状态的核心节点的数量。仅当对应的实例组存在时，才会报告此指标的数据点。 使用案例：监控集群运行状况 单位：*计数*  | 
| CoreNodesPending  | 等待分配的核心节点的数量。请求的所有核心节点可能不会立即可用；此指标报告挂起的请求。仅当对应的实例组存在时，才会报告此指标的数据点。 使用案例：监控集群运行状况 单位：*计数*  | 
| LiveDataNodes  | 从 Hadoop 接收任务的数据节点的百分率。 使用案例：监控集群运行状况 单位：*百分比*  | 
| MRTotal节点  | 目前可供 MapReduce 作业使用的节点数量。等效于 YARN 指标 `mapred.resourcemanager.TotalNodes`。 使用案例：监控集群进度 单位：*计数* 注意： MRTotal节点仅计算系统中当前处于活动状态的节点。YARN 会自动从该计数中删除已终止的节点并停止对其进行跟踪，因此 MRTotal节点指标中不考虑这些节点。  | 
| MRActive节点  | 当前正在运行 MapReduce 任务或作业的节点数量。等效于 YARN 指标 `mapred.resourcemanager.NoOfActiveNodes`。 使用案例：监控集群进度 单位：*计数*  | 
| MRLost节点  | 分配给已标记为 L MapReduce OST 状态的节点的数量。等效于 YARN 指标 `mapred.resourcemanager.NoOfLostNodes`。 使用案例：监控集群运行状况，监控集群进度 单位：*计数*  | 
| MRUnhealthy节点  | 标记为 “运行状况不佳” 的 MapReduce 作业可用的节点数量。等效于 YARN 指标 `mapred.resourcemanager.NoOfUnhealthyNodes`。 使用案例：监控集群进度 单位：*计数*  | 
| MRDecommissioned节点  | 分配给已标记为 “已停用” 状态的 MapReduce 应用程序的节点数。等效于 YARN 指标 `mapred.resourcemanager.NoOfDecommissionedNodes`。 使用案例：监控集群运行状况，监控集群进度 单位：*计数*  | 
| MRRebooted节点  | 已重新启动并标记为 MapReduce 已重新启动状态的可用节点的数量。等效于 YARN 指标 `mapred.resourcemanager.NoOfRebootedNodes`。 使用案例：监控集群运行状况，监控集群进度 单位：*计数*  | 
| MultiMasterInstanceGroupNodesRunning  | 正在运行的主节点的数量。 使用案例：监控主节点故障和替换 单位：*计数*  | 
| MultiMasterInstanceGroupNodesRunningPercentage  | 正在运行的主节点超过所请求的主节点实例计数的百分比。 使用案例：监控主节点故障和替换 单位：*百分比*  | 
| MultiMasterInstanceGroupNodesRequested  | 请求的主节点数。 使用案例：监控主节点故障和替换 单位：*计数*  | 
| IO | 
| S3 BytesWritten  | 写入 Amazon S3 的字节数。此指标仅汇总MapReduce 任务，不适用于 Amazon EMR 上的其他工作负载。 使用案例：分析集群性能，监控集群进度 单位：*计数*  | 
| S3 BytesRead  | 从 Amazon S3 读取的字节数。此指标仅汇总MapReduce 任务，不适用于 Amazon EMR 上的其他工作负载。 使用案例：分析集群性能，监控集群进度 单位：*计数*  | 
| HDFSUtilization  | 当前使用的 HDFS 存储的百分率。 使用案例：分析集群性能 单位：*百分比*  | 
| HDFSBytes阅读  | 从 HDFS 读取的字节数。此指标仅汇总MapReduce 任务，不适用于 Amazon EMR 上的其他工作负载。 使用案例：分析集群性能，监控集群进度 单位：*计数*  | 
| HDFSBytes书面的  | 写入 HDFS 的字节数。此指标仅汇总MapReduce 任务，不适用于 Amazon EMR 上的其他工作负载。 使用案例：分析集群性能，监控集群进度 单位：*计数*  | 
| MissingBlocks  | HDFS 在其中没有副本的数据块的数量。这些数据块可能已损坏。 使用案例：监控集群运行状况 单位：*计数*  | 
| CorruptBlocks  | HDFS 报告的受损数据块的数量。 使用案例：监控集群运行状况 单位：*计数*  | 
| TotalLoad  | 并发数据传输的总数。 使用案例：监控集群运行状况 单位：*计数*  | 
| MemoryTotalMB  | 集群中的总内存量。 使用案例：监控集群进度 单位：*计数*  | 
| MemoryReservedMB  | 预留内存量。 使用案例：监控集群进度 单位：*计数*  | 
| MemoryAvailableMB  | 可供分配的内存量。 使用案例：监控集群进度 单位：*计数*  | 
| YARNMemoryAvailablePercentage  | YARN 可用的剩余内存百分比 (YARNMemoryAvailablePercentage = MemoryAvailable MB/ MemoryTotal MB)。此值对基于 YARN 内存使用量扩展集群资源很有用。 单位：*百分比*  | 
| MemoryAllocatedMB  | 分配给集群的内存量。 使用案例：监控集群进度 单位：*计数*  | 
| PendingDeletionBlocks  | 标记为进行删除的数据块数。 使用案例：监控集群进度，监控集群运行状况 单位：*计数*  | 
| UnderReplicatedBlocks  | 需要复制一次或多次的数据块数。 使用案例：监控集群进度，监控集群运行状况 单位：*计数*  | 
| DfsPendingReplicationBlocks  | 数据块复制状态：所复制的数据块、复制请求的存在时间以及不成功的复制请求。 使用案例：监控集群进度，监控集群运行状况 单位：*计数*  | 
| CapacityRemainingGB  | 剩余 HDFS 磁盘容量。 使用案例：监控集群进度，监控集群运行状况 单位：*计数*  | 

Hadoop 1 指标如下：


| 指标 | 说明 | 
| --- | --- | 
| 集群状态 | 
| IsIdle  | 指示集群不再执行任务，但仍处于活动状态并会产生费用。如果没有任何任务和任务处于运行状态，则此指标设置为 1；否则设置为 0。系统每隔五分钟检查一次该值，值为 1 仅表示在检查时集群处于空闲状态，并不表示它整个五分钟内都处于空闲状态。为避免误报，当多次连续 5 分钟检查获得的值均为 1 时，您应提出警报。例如，当该值在三十分钟或更长时间内都为 1 时，您应提出警报。 使用案例：监控集群性能 单位：*布尔值*  | 
| JobsRunning  | 集群中当前处于运行状态的任务数量。 使用案例：监控集群运行状况 单位：*计数*  | 
| JobsFailed  | 集群中失败的任务数量。 使用案例：监控集群运行状况 单位：*计数*  | 
| 映射/减少 | 
| MapTasksRunning  | 每个作业处于运行中的映射任务的数量。如果您安装了调度器并且有多个任务在运行，那么会生成多个图表。 使用案例：监控集群进度 单位：*计数*  | 
| MapTasksRemaining  | 每个作业的剩余映射任务的数量。如果您安装了调度器并且有多个任务在运行，那么会生成多个图表。剩余映射任务是指未处于任何以下状态的任务：运行中、已终止或已完成。 使用案例：监控集群进度 单位：*计数*  | 
| MapSlotsOpen  | 未使用的映射任务容量。该指标将计算为给定集群的最大映射任务数与该集群中当前运行的映射任务总数之差。 使用案例：分析集群性能 单位：*计数*  | 
| RemainingMapTasksPerSlot  | 剩余映射任务的总数与集群中可用映射插槽总数之比。 使用案例：分析集群性能 单位：*比率*  | 
| ReduceTasksRunning  | 每个作业处于运行中的缩减任务的数量。如果您安装了调度器并且有多个任务在运行，那么会生成多个图表。 使用案例：监控集群进度 单位：*计数*  | 
| ReduceTasksRemaining  | 每个作业的剩余缩减任务的数量。如果您安装了调度器并且有多个任务在运行，那么会生成多个图表。 使用案例：监控集群进度 单位：*计数*  | 
| ReduceSlotsOpen  | 未使用的缩减任务容量。该指标将计算为给定集群的最大缩减任务容量与该集群中当前运行的缩减任务数之差。 使用案例：分析集群性能 单位：*计数*  | 
| 节点状态 | 
| CoreNodesRunning  | 处于运行状态的核心节点的数量。仅当对应的实例组存在时，才会报告此指标的数据点。 使用案例：监控集群运行状况 单位：*计数*  | 
| CoreNodesPending  | 等待分配的核心节点的数量。请求的所有核心节点可能不会立即可用；此指标报告挂起的请求。仅当对应的实例组存在时，才会报告此指标的数据点。 使用案例：监控集群运行状况 单位：*计数*  | 
| LiveDataNodes  | 从 Hadoop 接收任务的数据节点的百分率。 使用案例：监控集群运行状况 单位：*百分比*  | 
| TaskNodesRunning  | 处于运行状态的任务节点的数量。仅当对应的实例组存在时，才会报告此指标的数据点。 使用案例：监控集群运行状况 单位：*计数*  | 
| TaskNodesPending  | 等待分配的任务节点的数量。请求的所有任务节点可能不会立即可用；此指标报告挂起的请求。仅当对应的实例组存在时，才会报告此指标的数据点。 使用案例：监控集群运行状况 单位：*计数*  | 
| LiveTaskTrackers  | 处于运行状态的任务跟踪程序的百分率。 使用案例：监控集群运行状况 单位：*百分比*  | 
| IO | 
| S3 BytesWritten  | 写入 Amazon S3 的字节数。此指标仅汇总MapReduce 任务，不适用于 Amazon EMR 上的其他工作负载。 使用案例：分析集群性能，监控集群进度 单位：*计数*  | 
| S3 BytesRead  | 从 Amazon S3 读取的字节数。此指标仅汇总MapReduce 任务，不适用于 Amazon EMR 上的其他工作负载。 使用案例：分析集群性能，监控集群进度 单位：*计数*  | 
| HDFSUtilization  | 当前使用的 HDFS 存储的百分率。 使用案例：分析集群性能 单位：*百分比*  | 
| HDFSBytes阅读  | 从 HDFS 读取的字节数。 使用案例：分析集群性能，监控集群进度 单位：*计数*  | 
| HDFSBytes书面的  | 写入 HDFS 的字节数。 使用案例：分析集群性能，监控集群进度 单位：*计数*  | 
| MissingBlocks  | HDFS 在其中没有副本的数据块的数量。这些数据块可能已损坏。 使用案例：监控集群运行状况 单位：*计数*  | 
| TotalLoad  | 集群中所有 DataNodes 人报告的当前读者和作者总数。 用例：诊断高 I/O 可能在多大程度上导致作业执行性能不佳。运行 DataNode 守护程序的工作节点还必须执行映射和减少任务。随着时间的推移， TotalLoad 值持续偏高可能表明高值 I/O 可能是导致性能不佳的一个因素。此值的偶尔峰值属于常见情况，通常不指示问题。 单位：*计数*  | 

#### 集群容量指标
<a name="emr-metrics-managed-scaling"></a>

以下指标指示集群的当前容量或目标容量。仅当启用了托管扩展或自动终止时，这些指标才可用。

对于由实例集组成的集群，将在 `Units` 中测量集群容量指标。对于由实例组组成的集群，将根据托管扩展策略中使用的单位类型在 `Nodes` 或 `VCPU` 中测量集群容量指标。有关更多信息，请参阅 《Amazon EMR 管理指南》**中的[使用 EMR 托管扩展](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-managed-scaling.html)。


| 指标 | 说明 | 
| --- | --- | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/UsingEMR_ViewingMetrics.html) | 集群units/nodes/vCPUs中的目标总数，由托管扩展确定。 单位：*计数*  | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/UsingEMR_ViewingMetrics.html)  | 正在运行的集群中当前units/nodes/vCPUs可用的总数。当请求集群大小调整时，将在集群中添加或删除新实例后更新此指标。 单位：*计数*  | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/UsingEMR_ViewingMetrics.html)  | 集群units/nodes/vCPUs中的目标 CORE 数量，由托管扩展确定。 单位：*计数*  | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/UsingEMR_ViewingMetrics.html)  | 集群中当前units/nodes/vCPUs运行的 CORE 数量。 单位：*计数*  | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/UsingEMR_ViewingMetrics.html)  | 集群units/nodes/vCPUs中任务的目标数量，由托管扩展决定。 单位：*计数*  | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/UsingEMR_ViewingMetrics.html)  | 集群中当前units/nodes/vCPUs运行的 TASK 数量。 单位：*计数*  | 

当您使用自动终止策略启用自动终止时，Amazon EMR 将按一分钟的粒度发出以下指标。有些指标仅可用于 Amazon EMR 版本 6.4.0 及更高版本。要了解有关自动终止的更多信息，请参阅 [使用自动终止策略进行 Amazon EMR 集群清理](emr-auto-termination-policy.md)。


****  

| 指标 | 说明 | 
| --- | --- | 
| TotalNotebookKernels | 集群上运行和空闲 Notebook 内核的总数。此指标仅可用于 Amazon EMR 版本 6.4.0 及更高版本。 | 
| AutoTerminationIsClusterIdle | 表示集群是否正被使用。值为 **0** 表示集群当前正被以下组件之一使用：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/UsingEMR_ViewingMetrics.html) 值为 **1** 表示集群处于空闲状态。Amazon EMR 检查是否存在持续处于闲置状态的集群 (`AutoTerminationIsClusterIdle` = 1)。当某一集群的空闲时间等于自动终止策略中的 `IdleTimeout` 值时，Amazon EMR 将终止该集群。  | 

### Amazon EMR 指标的维度
<a name="emr-metrics-dimensions"></a>

Amazon EMR 数据可以使用下表中的任一维度进行筛选。


| 维度  | 说明  | 
| --- | --- | 
| JobFlowId | 与 集群 ID 相同，它是集群的唯一标识符（以 j-XXXXXXXXXXXXX 形式表示）。您可以通过在 Amazon EMR 控制台中单击集群来找到该值。 | 

# 使用以下方式监控 Amazon EMR 事件 CloudWatch
<a name="emr-manage-cloudwatch-events"></a>

Amazon EMR 跟踪事件并在 Amazon EMR 控制台中保存其相关信息最多七天。当集群、实例组、实例集、自动扩缩策略或步骤的状态发生变化时，Amazon EMR 会记录事件。事件捕获事件发生的日期和时间、有关受影响元素的详细信息以及其他关键数据点。

下表列出了 Amazon EMR 事件，以及事件指示的状态或状态变更、事件的严重性、事件类型、事件代码和事件消息。Amazon EMR 将事件表示为 JSON 对象并将其自动发送到事件流。当您使用事件设置事件处理规则时，JSON 对象很重要，因为规则 CloudWatch 会寻求匹配 JSON 对象中的模式。有关更多信息，请参阅 [Amazon E [vents 用户指南中的事件和事件模式](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html)以及 Amazon EMR CloudWatch ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/EventTypes.html#emr_event_type) *事件*。

**注意**  
EMR 会定期发出事件代码为 **EC2 预置：实例容量不足**的事件。当您的 Amazon EMR 集群在创建集群或调整集群大小操作期间遇到来自 Amazon EMR 的实例集或实例组容量不足错误时，会发生这些事件。一个事件可能不包括 AZs 您已提供的所有实例类型，因为 EMR 仅包含实例类型，并且自上次发出 “容量不足” 事件以来， AZs 它会尝试在中配置容量。有关如何响应这些事件的更多信息，请参阅[响应 Amazon EMR 集群实例容量不足事件](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-events-response-insuff-capacity.html)。

## 集群启动事件
<a name="emr-cloudwatch-cluster-events"></a>


| 状态或状态变更 | 严重性 | 事件类型 | 事件代码 | Message | 
| --- | --- | --- | --- | --- | 
| CREATING | WARN | EMR 实例集预置 | EC2 预置：实例容量不足 | 我们无法为实例集 InstanceFleetID 创建您的 Amazon EMR 集群 ClusterId (ClusterName) Amazon EC2 的实例类型 [Instancetype1, Instancetype2] 竞价容量不足，且可用区 [Instancetype3, Instancetype4] 中的实例类型 [AvailabilityZone1, AvaliabilityZone2] 的按需容量不足。有关如何应对此事件的更多信息，请查看此处的[文档](emr-EC2_INSUFFICIENT_CAPACITY-error.md)。 | 
| CREATING | WARN | EMR 实例组预置 | EC2 预置：实例容量不足 | 我们无法为实例组 InstanceGroupID 创建您的 Amazon EMR 集群 ClusterId (ClusterName) Amazon EC2 的实例类型 [Instancetype1, Instancetype2] 竞价容量不足，且可用区 [Instancetype3, Instancetype4] 中的实例类型 [AvailabilityZone1, AvaliabilityZone2] 的按需容量不足。有关如何应对此事件的更多信息，请查看此处的[文档](emr-EC2_INSUFFICIENT_CAPACITY-error.md)。 | 
| CREATING | WARN | EMR 实例集预置 | EC2 预置：子网中可用地址不足 | 我们无法创建您为实例集 InstanceFleetID 请求的 Amazon EMR 集群 ClusterId (ClusterName)，因为指定的子网 [Subnet1, Subnet2] 没有足够的可用私有 IP 地址来满足您的请求。使用 DescribeSubnets 操作查看您的子网中有多少 IP 地址可用（未使用）。有关如何响应此事件的信息，请参阅 [Amazon EC2 API 的错误代码](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html) | 
| CREATING | WARN | EMR 实例组预置 | EC2 预置：子网中可用地址不足 | 我们无法创建您为实例组 InstanceGroupID 请求的 Amazon EMR 集群 ClusterId (ClusterName)，因为指定的子网 [Subnet1, Subnet2] 没有足够的可用私有 IP 地址来满足您的请求。使用 DescribeSubnets 操作查看您的子网中有多少 IP 地址可用（未使用）。有关如何响应此事件的信息，请参阅 [Amazon EC2 API 的错误代码](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html) | 
| CREATING  | WARN  | EMR 实例集预置  | EC2 预置：已超出 vCPU 限制  | Amazon EMR 集群InstanceFleetIDClusterId (ClusterName)中的配置会延迟，因为您已达到分配给中正在运行的实例的 vCPUs （虚拟处理单元）数量的限制。account (accountId)有关更多信息，请参阅 [Amazon EC2 API 的错误代码](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)  | 
| CREATING  | WARN  | EMR 实例组预置  | EC2 预置：已超出 vCPU 限制  | 由于您已达到分配给账户InstanceGroupID中ClusterId正在运行的实例的 vCPUs （虚拟处理单元）数量的限制，因此在 Amazon EMR 集群中配置实例组会延迟。(accountId)有关更多信息，请参阅 [Amazon EC2 API 的错误代码](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)  | 
| CREATING  | WARN  | EMR 实例集预置  | EC2 预置：已超出竞价型实例数量限制  | Amazon EMR 集群 ClusterID (ClusterName) 中的实例集 InstanceFleetID 预置会延迟，因为您在 account (accountId) 中启动的竞价型实例数量已达到上限。有关更多信息，请参阅 [Amazon EC2 API 的错误代码](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| CREATING  | WARN  | EMR 实例组预置  | EC2 预置：已超出竞价型实例数量限制  | Amazon EMR 集群 ClusterID (ClusterName) 中的实例组 InstanceGroupID 预置会延迟，因为您在 account (accountId) 中启动的竞价型实例数量已达到上限。有关更多信息，请参阅 [Amazon EC2 API 的错误代码](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| CREATING  | WARN  | EMR 实例集预置  | EC2 预置：已超出实例限制  | Amazon EMR 集群 ClusterId (ClusterName) 中的实例集 InstanceFleetID 预置会延迟，因为您在 account (accountID) 中并发运行的实例数量已达到上限。有关 Amazon EC2 服务限制的更多信息，请参阅 [Amazon EC2 API 的错误代码](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| CREATING  | WARN  | EMR 实例组预置  | EC2 预置：已超出实例限制  | Amazon EMR 集群 ClusterId (ClusterName) 中的实例组 InstanceGroupID 预置会延迟，因为您在 account (accountID) 中并发运行的实例数量已达到上限。有关 Amazon EC2 服务限制的更多信息，请参阅 [Amazon EC2 API 的错误代码](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| CREATING | WARN | EMR 实例组预置 | *none* | Amazon EMR 集群 `ClusterId (ClusterName)` 于 `Time` 创建，并已准备就绪。 –或者–  Amazon EMR 集群 `ClusterId (ClusterName)` 于 `Time` 完成所有待处理步骤的运行。  处于 `WAITING` 状态的集群可能仍是正在处理的作业。   | 
| STARTING  | INFO  | EMR 集群状态更改  | *none*  | 已于 `Time` 请求 Amazon EMR 集群 `ClusterId (ClusterName)`，且当前正在创建中。  | 
| STARTING  | INFO  | EMR 集群状态更改  | *none*  |  仅适用于带实例集配置和 Amazon EC2 中选定的多个可用区的集群。  Amazon EMR 集群 `ClusterId (ClusterName)` 正在从指定可用区选项中选择的区域 (`AvailabilityZoneID`) 中创建。  | 
| STARTING  | INFO  | EMR 集群状态更改  | *none*  | Amazon EMR 集群 `ClusterId (ClusterName)` 于 `Time` 开始运行步骤。  | 
| WAITING  | INFO  | EMR 集群状态更改  | *none*  | Amazon EMR 集群 `ClusterId (ClusterName)` 于 `Time` 创建，并已准备就绪。 –或者–  Amazon EMR 集群 `ClusterId (ClusterName)` 于 `Time` 完成所有待处理步骤的运行。  处于 `WAITING` 状态的集群可能仍是正在处理的作业。   | 

**注意**  
当您的 EMR 集群在创建集群或调整集群大小操作期间遇到来自 Amazon EC2 的实例集或实例组容量不足错误时，会定期触发事件代码为 `EC2 provisioning - Insufficient Instance Capacity` 的事件。有关如何响应这些事件的更多信息，请参阅 [响应 Amazon EMR 集群实例容量不足事件](emr-events-response-insuff-capacity.md)。

## 集群终止事件
<a name="emr-cloudwatch-cluster-termination-events"></a>


| 状态或状态变更 | 严重性 | 事件类型 | 事件代码 | Message | 
| --- | --- | --- | --- | --- | 
| TERMINATED  | 严重性视状态变更原因而定，如下所述： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/emr-manage-cloudwatch-events.html)  | EMR 集群状态更改  | *none*  | Amazon EMR 集群 `ClusterId (ClusterName)` 已于 `Time` 终止，原因是 `StateChangeReason:Code`。  | 
| TERMINATED\$1WITH\$1ERRORS  | CRITICAL  | EMR 集群状态更改  | *none*  | Amazon EMR 集群 `ClusterId (ClusterName)` 已于 `Time` 因错误终止，原因是 `StateChangeReason:Code`。  | 
| TERMINATED\$1WITH\$1ERRORS  | CRITICAL  | EMR 集群状态更改  | *none*  | Amazon EMR 集群 `ClusterId (ClusterName)` 已于 `Time` 因错误终止，原因是 `StateChangeReason:Code`。  | 

## 实例集状态更改事件
<a name="emr-cloudwatch-instance-fleet-events"></a>

**注意**  
实例集配置仅在 Amazon EMR 发行版 4.8.0 及更高版本（不包括 5.0.0 和 5.0.3）中可用。


****  

| 状态或状态变更 | 严重性 | 事件类型 | 事件代码 | Message | 
| --- | --- | --- | --- | --- | 
| 从 `PROVISIONING` 到 `WAITING`  | INFO  |  | none | Amazon EMR 集群 `InstanceFleetID` 中对实例集 `ClusterId (ClusterName)` 的预置已完成。预置已于 `Time` 开始，并且已花费 `Num` 分钟。实例集现在的按需容量为 `Num`，竞价型容量为 `Num`。目标按需容量为 `Num`，目标竞价型容量为 `Num`。  | 
| 从 `WAITING` 到 `RESIZING`  | INFO  |  | none | 对 Amazon EMR 集群 `ClusterId (ClusterName)` 中实例集 `InstanceFleetID` 的大小调整已于 `Time` 开始。实例集的大小从按需容量 `Num` 调整到目标的 `Num`，而竞价型容量则从 `Num` 调整到目标的 `Num`。  | 
| 从 `RESIZING` 到 `WAITING`  | INFO  |  | none | 对 Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例集 `InstanceFleetID` 的大小调整操作已完成。大小调整已于 `Time` 开始，并且已花费 `Num` 分钟。实例集现在的按需容量为 `Num`，竞价型容量为 `Num`。目标按需容量为 `Num`，目标竞价型容量为 `Num`。  | 
| 从 `RESIZING` 到 `WAITING`  | INFO  |  | none | Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例集 `InstanceFleetID` 的大小调整操作已超时并且已停止。大小调整已于 `Time` 开始，并且在 `Num` 分钟后停止。实例集现在的按需容量为 `Num`，竞价型容量为 `Num`。目标按需容量为 `Num`，目标竞价型容量为 `Num`。  | 
| SUSPENDED  | ERROR  |  | none | 由于以下原因，Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例集 `InstanceFleetID` 于 `Time` 被捕获：`ReasonDesc`。  | 
| RESIZING  | WARNING  |  | none | 对 Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例集 `InstanceFleetID` 的大小调整操作发生卡顿，原因为：`ReasonDesc`。  | 
| `WAITING` 或 `Running`  | INFO  |  | none | 当 Amazon EMR 在可用区 `AvailabilityZone` 中添加竞价型容量时，无法完成 Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例集 `InstanceFleetID` 的大小调整操作。已取消您预置额外 Spot 容量的请求。有关推荐的操作，请查看 [Amazon EMR 集群的可用区灵活性](emr-flexibility.md) 并重试。  | 
| `WAITING` 或 `Running`  | INFO  |  | none | Amazon EMR 集群 `InstanceFleetID` 中的实例集 `ClusterId (ClusterName)` 的大小调整操作由 `Entity` 于 `Time` 启动。  | 

## 实例集重新配置事件
<a name="emr-cloudwatch-instance-fleet-events-reconfig"></a>


****  

| 状态或状态变更 | 严重性 | 消息 | 
| --- | --- | --- | 
| 已请求重新配置实例集  | INFO  | 用户已请求重新配置 Amazon EMR 集群 `ClusterId` (`ClusterName`) 中的实例集 `InstanceFleetID`。  | 
| 实例集重新配置开始  | INFO  | Amazon EMR 已于 `Time` 开始重新配置 Amazon EMR 集群 `ClusterId` (`ClusterName`) 中的实例集 `InstanceFleetID`。  | 
| 实例集重新配置已完成  | INFO  | Amazon EMR 已完成重新配置 Amazon EMR 集群 `ClusterId` (`ClusterName`) 中的实例集 `InstanceFleetID`。  | 
| 实例集重新配置失败  | WARNING  | Amazon EMR 已于 `Time` 重新配置 Amazon EMR 集群 `ClusterId` (`ClusterName`) 中的实例集 `InstanceFleetID` 失败。重新配置失败是因为 `Reason`。  | 
| 实例集重新配置恢复开始  | INFO  | Amazon EMR 正在将 Amazon EMR 集群 `ClusterId` (`ClusterName`) 中的实例集 `InstanceFleetID` 恢复到之前的成功配置。  | 
| 实例集重新配置恢复已完成  | INFO  | Amazon EMR 已完成将 Amazon EMR 集群 `ClusterId` (`ClusterName`) 中的实例集 `InstanceFleetID` 恢复到之前的成功配置。  | 
| 实例集重新配置恢复失败  | CRITICAL  | Amazon EMR 已于 `Time` 将 Amazon EMR 集群 `ClusterId` (`ClusterName`) 中的实例集 `InstanceFleetID` 恢复到之前的成功配置失败。重新配置恢复失败是因为 `Reason`。  | 
| 已阻止实例集重新配置恢复  | INFO  | 由于实例集处于 `State` 状态，Amazon EMR 于 `Time` 暂时阻止 Amazon EMR 集群 `ClusterId` (`ClusterName`) 中的实例集 `InstanceFleetID`。  | 

## 实例集大小调整事件
<a name="emr-cloudwatch-instance-fleet-resize-events"></a>


****  

| 事件类型 | 严重性 | 事件代码 | Message | 
| --- | --- | --- | --- | 
| EMR 实例集调整大小   | ERROR | 竞价型预置超时  | 在可用区 `AvailabilityZone` 中获取竞价型容量时，无法完成 Amazon EMR 集群 `ClusterId (ClusterName)` 中实例集 `InstanceFleetID` 的大小调整操作。我们现在已经取消了您的请求并停止尝试预置任何额外的竞价型容量，并且实例集已经预置了 `num` 的竞价型容量。目标竞价型容量为 `num`。有关更多信息和建议的操作，请查看[此处](emr-flexibility.md)的文档页面，然后重试。  | 
| EMR 实例集调整大小   | ERROR | 按需预置超时  | 在可用区 `AvailabilityZone` 中获取按需容量时，无法完成 Amazon EMR 集群 `ClusterId (ClusterName)` 中实例集 `InstanceFleetID` 的大小调整操作。我们现在已经取消了您的请求并停止尝试预置任何额外的按需容量，并且实例集已经预置了 `num` 的按需容量。目标按需容量为 `num`。有关更多信息和建议的操作，请查看[此处](emr-flexibility.md)的文档页面，然后重试。  | 
| EMR 实例集调整大小   | WARNING | EC2 预置：实例容量不足 | 我们无法完成 EMR 集群 `ClusterId (ClusterName)` 中实例集 `InstanceFleetID` 的大小调整操作，因为Amazon EC2 实例类型 `[Instancetype1, Instancetype2]` 的竞价型容量不足，且可用区 `[AvailabilityZone1]` 中的实例类型 `[Instancetype3, Instancetype4]` 的按需容量不足。实例集预置的按需容量为 `num`，目标按需容量为 `num`。预置的竞价型容量为 `num`，目标竞价型容量为 `num`。有关如何应对此事件的更多信息，请查看此处的[文档](emr-EC2_INSUFFICIENT_CAPACITY-error.md)。  | 
| EMR 实例集调整大小   | WARNING | 竞价型预置超时：继续调整大小  | 我们仍在为实例集大小调整操作预置竞价型容量，该操作于 `time` 在可用区 `AvailabilityZone` 中 `[Instancetype1, Instancetype2]` 的 Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例集 ID `InstanceFleetID` 启动。对于在 `time` 启动的之前的大小调整操作，超时时间已过期，因此 Amazon EMR 在将请求的 `num` 实例的 `num` 添加到您的实例集后停止预置竞价型容量。有关更多信息，请查看[此处](emr-flexibility.md)的文档页面。 | 
| EMR 实例集调整大小   | WARNING | 按需预置超时：继续调整大小  | 我们仍在为实例集大小调整操作预置按需容量，该操作于 `time` 在可用区 `AvailabilityZone` 中 `[Instancetype1, Instancetype2]` Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例集 ID `InstanceFleetID` 启动。对于在 `time` 启动的之前的大小调整操作，超时时间已过期，因此 Amazon EMR 在将请求的 `num` 实例的 `num` 添加到您的实例集后停止预置按需容量。有关更多信息，请查看[此处](emr-flexibility.md)的文档页面。 | 
| EMR 实例集调整大小   | WARNING | EC2 预置：子网中可用地址不足  | 我们无法完成 Amazon EMR 集群 ClusterId (ClusterName) 中实例集 InstanceFleetID 的调整大小操作，因为指定的子网 [Subnet1, Subnet2] 没有足够的可用私有 IP 地址来满足您的请求。使用 DescribeSubnets 操作查看您的子网中有多少 IP 地址可用（未使用）。有关如何响应此事件的信息，请参阅 [Amazon EC2 API 的错误代码](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| EMR 实例集调整大小   | WARNING | EC2 预置：已超出 vCPU 限制  | Amazon EMR 集群InstanceFleetIDClusterName中实例队列的大小会延迟，因为您已达到分配给中正在运行的实例的 vCPUs （虚拟处理单元）数量的限制。account (accountId)有关更多信息，请参阅 [Amazon EC2 API 的错误代码](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| EMR 实例集调整大小  | WARNING | EC2 预置：已超出竞价型实例数量限制  | Amazon EMR 集群 ClusterID (ClusterName) 中的实例集 InstanceFleetID 预置会延迟，因为您在 account (accountId) 中启动的竞价型实例数量已达到上限。有关更多信息，请参阅 [Amazon EC2 API 的错误代码](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| EMR 实例集调整大小   | WARNING | EC2 预置：已超出实例限制  | Amazon EMR 集群 ClusterID (ClusterName) 中的实例集 InstanceFleetID 预置会延迟，因为您在 account (accountId) 中运行的按需型实例数量已达到上限。有关更多信息，请参阅 [Amazon EC2 API 的错误代码](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 

**注意**  
超时到期后，当 Amazon EMR 停止为实例集预置竞价型或按需容量时，就会发出预置超时事件。有关如何响应这些事件的更多信息，请参阅 [响应 Amazon EMR 集群实例集调整大小超时事件](emr-events-response-timeout-events.md)。

## 实例组事件
<a name="emr-cloudwatch-instance-group-events"></a>


****  

| 事件类型 | 严重性 | 事件代码 | Message | 
| --- | --- | --- | --- | 
| 从 `RESIZING` 到 `Running`  | INFO  | none | 对 Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例组 `InstanceGroupID` 的大小调整操作已完成。它当前拥有 `Num` 个实例。大小调整操作已于 `Time` 开始，花费 `Num` 分钟时间完成。  | 
| 从 `RUNNING` 到 `RESIZING`  | INFO  | none | 对 Amazon EMR 集群 `ClusterId (ClusterName)` 中实例组 `InstanceGroupID` 的大小调整已于 `Time` 开始。它的实例数从 `Num` 个调整为 `Num` 个。  | 
| SUSPENDED  | ERROR  | none | 由于以下原因，Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例组 `InstanceGroupID` 于 `Time` 被捕获：`ReasonDesc`。  | 
| RESIZING  | WARNING  | none | 对 Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例组 `InstanceGroupID` 的大小调整操作发生卡顿，原因为：`ReasonDesc`。  | 
| EMR 实例组调整大小   | WARNING | EC2 预置：实例容量不足 | 我们无法完成 EMR 集群 `ClusterId (ClusterName)` 中于 `time` 开始对实例组 `InstanceGroupID` 的调整大小操作，因为 Amazon EC2 在可用区 `[AvailabilityZone1]` 中的实例类型 `[Instancetype]` 容量 `Spot/On Demand` 不足。到目前为止，该实例组的运行实例计数为 `num`，请求的实例计数为 `num`。有关如何应对此事件的更多信息，请查看此处的[文档](emr-EC2_INSUFFICIENT_CAPACITY-error.md)。  | 
| EMR 实例组调整大小   | WARNING | EC2 预置：子网中可用地址不足  | 我们无法完成 Amazon EMR 集群 ClusterId (ClusterName) 中实例组 InstanceGroupID 的调整大小操作，因为指定的子网 [Subnet1, Subnet2] 没有足够的可用私有 IP 地址来满足您的请求。使用 DescribeSubnets 操作查看您的子网中有多少 IP 地址可用（未使用）。有关如何响应此事件的信息，请参阅 [Amazon EC2 API 的错误代码](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| EMR 实例组调整大小   | WARNING | EC2 预置：已超出 vCPU 限制  | Amazon EMR 集群InstanceGroupIDClusterName中实例组的大小会延迟，因为您已达到分配给中正在运行的实例的 vCPUs （虚拟处理单元）数量的限制。account (accountId)有关更多信息，请参阅 [Amazon EC2 API 的错误代码](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| EMR 实例组调整大小   | WARNING | EC2 预置：已超出竞价型实例数量限制  | Amazon EMR 集群 ClusterID (ClusterName) 中的实例组 InstanceGroupID 预置会延迟，因为您在 account (accountId) 中启动的竞价型实例数量已达到上限。有关更多信息，请参阅 [Amazon EC2 API 的错误代码](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| EMR 实例组调整大小   | WARNING | EC2 预置：已超出实例限制  | Amazon EMR 集群 ClusterID (ClusterName) 中的实例组 InstanceGroupID 预置会延迟，因为您在 account (accountId) 中运行的按需型实例数量已达到上限。有关更多信息，请参阅 [Amazon EC2 API 的错误代码](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| 从 `RUNNING` 到 `RESIZING`  | INFO  | none | Amazon EMR 集群 `InstanceGroupID` 中的实例组 `ClusterId (ClusterName)` 的大小调整由 `Entity` 于 `Time` 启动。  | 

**注意**  
对于 Amazon EMR 5.21.0 及更高版本，您可以覆盖集群配置，并为运行的集群中的每个实例组指定额外的配置分类。您可以使用 Amazon EMR 控制台、 AWS Command Line Interface (AWS CLI) 或软件开发工具包来完成此操作。 AWS 有关更多信息，请参阅[为运行的集群中的实例组提供配置](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-running-cluster.html)。

下表列出了重新配置操作的 Amazon EMR 事件，以及事件指示的状态或状态变更、事件的严重性和事件消息。


****  

| 状态或状态变更 | 严重性 | 消息 | 
| --- | --- | --- | 
| RUNNING  | INFO  | Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例组 `InstanceGroupID` 的重新配置由用户于 `Time` 启动。请求的配置版本为 `Num`。  | 
| 从 `RECONFIGURING` 到 `Running` | INFO  | 对 Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例组 `InstanceGroupID` 的重新配置操作已完成。重新配置已于 `Time` 开始，花费 `Num` 分钟完成。当前配置版本为 `Num`。  | 
| 从 `RUNNING` 到 `RECONFIGURING` in  | INFO  | 对 Amazon EMR 集群 `ClusterId (ClusterName)` 中实例组 `InstanceGroupID` 的重新配置已于 `Time` 开始。它从版本号 `Num` 配置为版本号 `Num`。  | 
| RESIZING  | INFO  | Amazon EMR 集群 `ClusterId (ClusterName)` 中实例组 `InstanceGroupID` 的配置版本 `Num` 的重新配置操作在 `Time` 被临时阻止，因为实例组处于 `State` 状态。  | 
| RECONFIGURING  | INFO  | Amazon EMR 集群 ClusterId (ClusterName) 中实例组 Time 的实例计数 Num 的调整大小操作在 InstanceGroupID 被临时阻止，因为实例组处于 State 状态。 | 
| RECONFIGURING  | WARNING  | Amazon EMR 集群 `ClusterId (ClusterName)` 中实例组 `InstanceGroupID` 的重新配置操作于 `Time` 失败，失败之前经过了 `Num` 分钟。失败的配置版本为 `Num`。  | 
| RECONFIGURING  | INFO  | 配置正在恢复到在 `Time` 时 Amazon EMR 集群 `ClusterId (ClusterName)` 中实例组 `InstanceGroupID` 的上一个成功版本号 `Num`。新配置版本为 `Num`。  | 
| 从 `RECONFIGURING` 到 `Running` | INFO  | 配置已成功恢复到在 `Time` 时 Amazon EMR 集群 `ClusterId (ClusterName)` 中实例组 `InstanceGroupID` 的上一个成功版本号 `Num`。新配置版本为 `Num`。  | 
| 从 `RECONFIGURING` 到 `SUSPENDED`  | CRITICAL  | 无法恢复到在 `Time` 时 Amazon EMR 集群 `ClusterId (ClusterName)` 中实例组 `InstanceGroupID` 的上一个成功版本号 `Num`。  | 

## 自动伸缩策略事件
<a name="emr-cloudwatch-autoscale-events"></a>


****  

| 状态或状态变更 | 严重性 | 消息 | 
| --- | --- | --- | 
| PENDING  | INFO  | 自动扩缩策略已于 `Time` 添加到 Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例组 `InstanceGroupID`。策略正在等待附加。 –或者–  Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例组 `InstanceGroupID` 的自动扩缩策略已于 `Time` 更新。策略正在等待附加。  | 
| ATTACHED  | INFO  | Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例组 `InstanceGroupID` 的自动扩缩策略已于 `Time` 附加。  | 
| `DETACHED`  | INFO  | Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例组 `InstanceGroupID` 的自动扩缩策略已于 `Time` 分离。  | 
| FAILED  | ERROR  | Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例组 `InstanceGroupID` 的自动扩缩策略无法附加，并于 `Time` 失败。 –或者–  Amazon EMR 集群 `ClusterId (ClusterName)` 中的实例组 `InstanceGroupID` 的自动扩缩策略无法分离，并于 `Time` 失败。  | 

## 步骤事件
<a name="emr-cloudwatch-step-events"></a>


****  

| 状态或状态变更 | 严重性 | 消息 | 
| --- | --- | --- | 
| PENDING  | INFO  | 步骤 `StepID (StepName)` 已于 `Time` 添加到 Amazon EMR 集群 `ClusterId (ClusterName)`，正在等待执行。  | 
| CANCEL\$1PENDING  | WARN  | Amazon EMR 集群 `ClusterId (ClusterName)` 中的步骤 `StepID (StepName)` 已于 `Time` 取消，正在等待取消。  | 
| RUNNING  | INFO  | Amazon EMR 集群 `ClusterId (ClusterName)` 中的步骤 `StepID (StepName)` 已于 `Time` 开始运行。  | 
| COMPLETED  | INFO  | Amazon EMR 集群 `ClusterId (ClusterName)` 中的步骤 `Time` 已于 `StepID (StepName)` 完成执行。此步骤已于 `Time` 开始运行，花费 `Num` 分钟时间完成。  | 
| CANCELLED  | WARN  | Amazon EMR 集群 `ClusterId (ClusterName)` 中的集群步骤 `StepID (StepName)` 的取消请求于 `Time` 成功完成，此步骤现已取消。  | 
| FAILED  | ERROR  | Amazon EMR 集群 `ClusterId (ClusterName)` 中的步骤 `StepID (StepName)` 于 `Time` 失败。  | 

## 运行状况不佳的节点替换事件
<a name="emr-cloudwatch-unhealthy-node-replacement-events"></a>


| 事件类型 | 严重性 | 事件代码 | Message | 
| --- | --- | --- | --- | 
| Amazon EMR 运行状况不佳的节点替换 | INFO | 检测到运行状况不佳的核心节点 | Amazon EMR 已确定 Amazon EMR 集群 `clusterID (ClusterName)` 中 `InstanceGroup/Fleet` 的核心实例 `[instanceID (InstanceName)]` 为 `UNHEALTHY`。Amazon EMR 将尝试恢复或正常替换 `UNHEALTHY` 实例。  | 
| Amazon EMR 运行状况不佳的节点替换 | INFO | 核心节点运行状况不佳：替换已禁用 | Amazon EMR 已确定 Amazon EMR 集群 `(clusterID) (ClusterName)` 中 `InstanceGroup/Fleet` 的核心实例 `[instanceID (InstanceName)]` 为 `UNHEALTHY`。在集群中启用正常运行状况不佳的核心节点替换，以允许 Amazon EMR 在实例无法恢复的情况下正常替换 `UNHEALTHY` 实例。  | 
| Amazon EMR 运行状况不佳的节点替换 | WARN | 未替换运行状况不佳的核心节点 | 由于某些*原因*，Amazon EMR 无法替换 Amazon EMR 集群 `clusterID (ClusterName)` 中 `InstanceGroup/Fleet` 的 `UNHEALTHY` 核心实例 `[instanceID (InstanceName)]`。 Amazon EMR 无法替换核心节点的原因因具体场景而异。例如，Amazon EMR 无法删除节点的原因之一是集群中没有剩余的核心节点。  | 
| Amazon EMR 运行状况不佳的节点替换 | INFO | 运行状况不佳的核心节点已恢复 | Amazon EMR 已在 Amazon EMR 集群 `clusterID (ClusterName)` 的 `InstanceGroup/Fleet` 中恢复了 `UNHEALTHY` 核心实例 `[instanceID (InstanceName)]`  | 

有关运行状况不佳的节点替换的更多信息，请参阅[替换运行状况不佳的节点](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-node-replacement.html)。

## 使用 Amazon EMR 控制台查看事件
<a name="emr-events-console"></a>

对于每个集群，您可以在详细信息窗格中查看简单的事件列表，该列表按发生顺序降序列出事件。您还可以按照事件发生顺序的降序查看区域中所有集群的所有事件。

如果您不希望用户查看区域的所有集群事件，请向附加到用户的策略添加一条语句，该语句拒绝对 `"Effect": "Deny"` 操作的权限 (`elasticmapreduce:ViewEventsFromAllClustersInConsole`)。

**使用控制台查看区域中所有集群的事件**

1. [登录 AWS 管理控制台，然后在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/emr)

1. 在左侧导航窗格中的 **EMR on EC2** 下，选择 **Events**（事件）。

**使用控制台查看特定集群的事件**

1. [登录 AWS 管理控制台，然后在 /emr 上打开亚马逊 EMR 控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/emr)

1. 在左侧导航窗格中的 **EMR on EC2** 下，选择 **Clusters**（集群），然后选择集群。

1. 要查看您的所有事件，请在集群详细信息页面上选择 **Events**（事件）选项卡。

# 回应来自亚马逊 EMR CloudWatch 的事件
<a name="emr-events-response"></a>

[本节介绍如何响应 Amazon EMR 作为事件消息发出的CloudWatch 可操作事件。](emr-manage-cloudwatch-events.md)响应事件的方式包括创建规则、设置警报和其他响应。以下部分包括程序的链接以及对常见事件的建议响应。

**Topics**
+ [使用为 Amazon EMR 事件创建规则 CloudWatch](emr-events-cloudwatch-console.md)
+ [根据 Amazon EM CloudWatch R 中的指标设置警报](UsingEMR_ViewingMetrics_Alarm.md)
+ [响应 Amazon EMR 集群实例容量不足事件](emr-events-response-insuff-capacity.md)
+ [响应 Amazon EMR 集群实例集调整大小超时事件](emr-events-response-timeout-events.md)

# 使用为 Amazon EMR 事件创建规则 CloudWatch
<a name="emr-events-cloudwatch-console"></a>

Amazon EMR 会自动将事件发送到 CloudWatch 事件流。您可以根据特定的模式创建匹配事件的规则，以便将事件路由到目标来执行操作，如发送电子邮件通知。针对事件的 JSON 对象匹配模式。有关亚马逊 EMR 事件详情的更多信息，请参阅《亚马逊活动用户指南》[中的*亚马 CloudWatch *逊 EMR](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/EventTypes.html#emr_event_type) 事件。

有关设置 CloudWatch 事件规则的信息，请参阅[创建在事件上触发的 CloudWatch 规则](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-Rule.html)。

# 根据 Amazon EM CloudWatch R 中的指标设置警报
<a name="UsingEMR_ViewingMetrics_Alarm"></a>

亚马逊 EMR 将指标推送给亚马逊。 CloudWatch作为响应，您可以使用 CloudWatch 对您的 Amazon EMR 指标设置警报。例如，您可以在中配置警报， CloudWatch 以便在 HDFS 利用率上升到 80% 以上时随时向您发送电子邮件。有关详细说明，请参阅《*Amazon CloudWatch 用户指南》*中的[创建或编辑 CloudWatch 警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ConsoleAlarms.html)。

# 响应 Amazon EMR 集群实例容量不足事件
<a name="emr-events-response-insuff-capacity"></a>

## 概述
<a name="emr-events-response-insuff-capacity-overview"></a>

当所选可用区没有足够的容量来满足您的集群启动或调整大小请求时，Amazon EMR 集群会返回事件代码 `EC2 provisioning - Insufficient Instance Capacity`。如果 Amazon EMR 反复遇到容量不足异常，并且无法满足您的集群启动或集群调整大小操作的预置请求，则对于实例组和实例集该事件都会定期触发。

本页介绍在 EMR 集群发生此类事件时，如何最好地响应此类事件。

## 对容量不足事件的建议响应
<a name="emr-events-response-insuff-capacity-rec"></a>

我们建议您通过以下方式之一来应对容量不足事件：
+ 等待容量恢复。容量经常变化，因此容量不足的异常可以自行恢复。只要 Amazon EC2 容量可用，您的集群就会开始或完成大小调整。
+ 或者，您可以终止集群，修改实例类型配置，然后使用更新的集群配置请求创建新集群。有关更多信息，请参阅 [Amazon EMR 集群的可用区灵活性](emr-flexibility.md)。

您还可以设置对容量不足事件的规则或自动响应，如下一节所述。

## 从容量不足事件中自动恢复
<a name="emr-events-response-insuff-capacity-ex"></a>

您可以构建自动化以响应 Amazon EMR 事件，例如带有事件代码 `EC2 provisioning - Insufficient Instance Capacity` 的事件。例如，以下 AWS Lambda 函数终止具有使用按需实例的实例组的 EMR 集群，然后创建一个新的 EMR 集群，其实例组包含的实例类型与原始请求不同。

以下条件会触发自动流程的发生：
+ 主节点或核心节点的容量不足事件已持续超过 20 分钟。
+ 集群未处于**就绪**或**等待**状态。有关 EMR 集群状态的更多信息，请参阅 [了解集群的生命周期](emr-overview.md#emr-overview-cluster-lifecycle)。

**注意**  
在为容量不足异常建立自动化流程时，应考虑容量不足事件是可以恢复的。容量经常发生变化，只要 Amazon EC2 容量可用，您的集群就会恢复调整大小或开始操作。

**Example 响应容量不足事件的功能**  

```
// Lambda code with Python 3.10 and handler is lambda_function.lambda_handler
// Note: related IAM role requires permission to use Amazon EMR

import json
import boto3
import datetime
from datetime import timezone

INSUFFICIENT_CAPACITY_EXCEPTION_DETAIL_TYPE = "EMR Instance Group Provisioning"
INSUFFICIENT_CAPACITY_EXCEPTION_EVENT_CODE = (
    "EC2 provisioning - Insufficient Instance Capacity"
)
ALLOWED_INSTANCE_TYPES_TO_USE = [
    "m5.xlarge",
    "c5.xlarge",
    "m5.4xlarge",
    "m5.2xlarge",
    "t3.xlarge",
]
CLUSTER_START_ACCEPTABLE_STATES = ["WAITING", "RUNNING"]
CLUSTER_START_SLA = 20

CLIENT = boto3.client("emr", region_name="us-east-1")

# checks if the incoming event is 'EMR Instance Fleet Provisioning' with eventCode 'EC2 provisioning - Insufficient Instance Capacity'
def is_insufficient_capacity_event(event):
    if not event["detail"]:
        return False
    else:
        return (
            event["detail-type"] == INSUFFICIENT_CAPACITY_EXCEPTION_DETAIL_TYPE
            and event["detail"]["eventCode"]
            == INSUFFICIENT_CAPACITY_EXCEPTION_EVENT_CODE
        )


# checks if the cluster is eligible for termination
def is_cluster_eligible_for_termination(event, describeClusterResponse):
    # instanceGroupType could be CORE, MASTER OR TASK
    instanceGroupType = event["detail"]["instanceGroupType"]
    clusterCreationTime = describeClusterResponse["Cluster"]["Status"]["Timeline"][
        "CreationDateTime"
    ]
    clusterState = describeClusterResponse["Cluster"]["Status"]["State"]

    now = datetime.datetime.now()
    now = now.replace(tzinfo=timezone.utc)
    isClusterStartSlaBreached = clusterCreationTime < now - datetime.timedelta(
        minutes=CLUSTER_START_SLA
    )

    # Check if instance group receiving Insufficient capacity exception is CORE or PRIMARY (MASTER),
    # and it's been more than 20 minutes since cluster was created but the cluster state and the cluster state is not updated to RUNNING or WAITING
    if (
        (instanceGroupType == "CORE" or instanceGroupType == "MASTER")
        and isClusterStartSlaBreached
        and clusterState not in CLUSTER_START_ACCEPTABLE_STATES
    ):
        return True
    else:
        return False


# Choose item from the list except the exempt value
def choice_excluding(exempt):
    for i in ALLOWED_INSTANCE_TYPES_TO_USE:
        if i != exempt:
            return i


# Create a new cluster by choosing different InstanceType.
def create_cluster(event):
    # instanceGroupType cloud be CORE, MASTER OR TASK
    instanceGroupType = event["detail"]["instanceGroupType"]

    # Following two lines assumes that the customer that created the cluster already knows which instance types they use in original request
    instanceTypesFromOriginalRequestMaster = "m5.xlarge"
    instanceTypesFromOriginalRequestCore = "m5.xlarge"

    # Select new instance types to include in the new createCluster request
    instanceTypeForMaster = (
        instanceTypesFromOriginalRequestMaster
        if instanceGroupType != "MASTER"
        else choice_excluding(instanceTypesFromOriginalRequestMaster)
    )
    instanceTypeForCore = (
        instanceTypesFromOriginalRequestCore
        if instanceGroupType != "CORE"
        else choice_excluding(instanceTypesFromOriginalRequestCore)
    )

    print("Starting to create cluster...")
    instances = {
        "InstanceGroups": [
            {
                "InstanceRole": "MASTER",
                "InstanceCount": 1,
                "InstanceType": instanceTypeForMaster,
                "Market": "ON_DEMAND",
                "Name": "Master",
            },
            {
                "InstanceRole": "CORE",
                "InstanceCount": 1,
                "InstanceType": instanceTypeForCore,
                "Market": "ON_DEMAND",
                "Name": "Core",
            },
        ]
    }
    response = CLIENT.run_job_flow(
        Name="Test Cluster",
        Instances=instances,
        VisibleToAllUsers=True,
        JobFlowRole="EMR_EC2_DefaultRole",
        ServiceRole="EMR_DefaultRole",
        ReleaseLabel="emr-6.10.0",
    )

    return response["JobFlowId"]


# Terminated the cluster using clusterId received in an event
def terminate_cluster(event):
    print("Trying to terminate cluster, clusterId: " + event["detail"]["clusterId"])
    response = CLIENT.terminate_job_flows(JobFlowIds=[event["detail"]["clusterId"]])
    print(f"Terminate cluster response: {response}")


def describe_cluster(event):
    response = CLIENT.describe_cluster(ClusterId=event["detail"]["clusterId"])
    return response


def lambda_handler(event, context):
    if is_insufficient_capacity_event(event):
        print(
            "Received insufficient capacity event for instanceGroup, clusterId: "
            + event["detail"]["clusterId"]
        )

        describeClusterResponse = describe_cluster(event)

        shouldTerminateCluster = is_cluster_eligible_for_termination(
            event, describeClusterResponse
        )
        if shouldTerminateCluster:
            terminate_cluster(event)

            clusterId = create_cluster(event)
            print("Created a new cluster, clusterId: " + clusterId)
        else:
            print(
                "Cluster is not eligible for termination, clusterId: "
                + event["detail"]["clusterId"]
            )

    else:
        print("Received event is not insufficient capacity event, skipping")
```

# 响应 Amazon EMR 集群实例集调整大小超时事件
<a name="emr-events-response-timeout-events"></a>

## 概述
<a name="emr-events-response-timeout-events-overview"></a>

Amazon EMR 集群在对实例集集群执行调整大小操作时会发出[事件](emr-manage-cloudwatch-events.md#emr-cloudwatch-instance-fleet-resize-events)。超时到期后，当 Amazon EMR 停止为实例集预置竞价型或按需容量时，就会发出预置超时事件。用户可以将超时持续时间配置为实例集[调整大小规范](https://docs.aws.amazon.com/emr/latest/APIReference/API_InstanceFleetResizingSpecifications.html)的一部分。在对相同实例集连续调整大小的情况下，当前调整大小操作的超时到期时，Amazon EMR 会发出 `Spot provisioning timeout - continuing resize` 或 `On-Demand provisioning timeout - continuing resize` 事件。然后，它开始为队列的下一次调整大小操作预置容量。

## 响应实例集调整大小超时事件
<a name="emr-events-response-timeout-events-rec"></a>

我们建议您通过以下方式之一来响应预置超时事件：
+ 重访[调整大小规范](https://docs.aws.amazon.com/emr/latest/APIReference/API_InstanceFleetResizingSpecifications.html)，然后重试调整大小操作。由于容量频繁变化，只要 Amazon EC2 容量可用，您的集群就会成功调整大小。我们建议客户为要求更严格的任务配置较低的超时持续时间值SLAs。
+ 或者，您可以：
  + 根据[实例和可用区灵活性的最佳实践](emr-flexibility.md#emr-flexibility-types)启动具有多种实例类型的新集群，或
  + 启动具有按需容量的集群
+ 对于配置超时：继续调整事件大小，您还可以等待调整大小操作的处理。Amazon EMR 将继续按顺序处理针对实例触发的调整大小操作，同时遵守配置的调整大小规范。

您还可以设置对该事件的规则或自动响应，如下一节所述。

## 自动从预置超时事件中恢复
<a name="emr-events-response-timeout-events-ex"></a>

您可以使用 `Spot Provisioning timeout` 事件代码构建自动化以响应 Amazon EMR 事件。例如，以下 AWS Lambda 函数关闭了具有使用竞价型实例作为任务节点的实例集的 EMR 集群，然后创建一个新的 EMR 集群，其实例集包含的实例类型比原始请求更加多样化。在此示例中，为任务节点发出的 `Spot Provisioning timeout` 事件将触发 Lambda 函数的执行。

**Example 响应 `Spot Provisioning timeout` 事件的示例函数**  

```
// Lambda code with Python 3.10 and handler is lambda_function.lambda_handler
// Note: related IAM role requires permission to use Amazon EMR
 
import json
import boto3
import datetime
from datetime import timezone
 
SPOT_PROVISIONING_TIMEOUT_EXCEPTION_DETAIL_TYPE = "EMR Instance Fleet Resize"
SPOT_PROVISIONING_TIMEOUT_EXCEPTION_EVENT_CODE = (
    "Spot Provisioning timeout"
)
 
CLIENT = boto3.client("emr", region_name="us-east-1")
 
# checks if the incoming event is 'EMR Instance Fleet Resize' with eventCode 'Spot provisioning timeout'
def is_spot_provisioning_timeout_event(event):
    if not event["detail"]:
        return False
    else:
        return (
            event["detail-type"] == SPOT_PROVISIONING_TIMEOUT_EXCEPTION_DETAIL_TYPE
            and event["detail"]["eventCode"]
            == SPOT_PROVISIONING_TIMEOUT_EXCEPTION_EVENT_CODE
        )
 
 
# checks if the cluster is eligible for termination
def is_cluster_eligible_for_termination(event, describeClusterResponse):
    # instanceFleetType could be CORE, MASTER OR TASK
    instanceFleetType = event["detail"]["instanceFleetType"]
 
    # Check if instance fleet receiving Spot provisioning timeout event is TASK
    if (instanceFleetType == "TASK"):
        return True
    else:
        return False
 
 
# create a new cluster by choosing different InstanceType.
def create_cluster(event):
    # instanceFleetType cloud be CORE, MASTER OR TASK
    instanceFleetType = event["detail"]["instanceFleetType"]
 
    # the following two lines assumes that the customer that created the cluster already knows which instance types they use in original request
    instanceTypesFromOriginalRequestMaster = "m5.xlarge"
    instanceTypesFromOriginalRequestCore = "m5.xlarge"
   
    # select new instance types to include in the new createCluster request
    instanceTypesForTask = [
        "m5.xlarge",
        "m5.2xlarge",
        "m5.4xlarge",
        "m5.8xlarge",
        "m5.12xlarge"
    ]
    
    print("Starting to create cluster...")
    instances = {
        "InstanceFleets": [
            {
                "InstanceFleetType":"MASTER",
                "TargetOnDemandCapacity":1,
                "TargetSpotCapacity":0,
                "InstanceTypeConfigs":[
                    {
                        'InstanceType': instanceTypesFromOriginalRequestMaster,
                        "WeightedCapacity":1,
                    }
                ]
            },
            {
                "InstanceFleetType":"CORE",
                "TargetOnDemandCapacity":1,
                "TargetSpotCapacity":0,
                "InstanceTypeConfigs":[
                    {
                        'InstanceType': instanceTypesFromOriginalRequestCore,
                        "WeightedCapacity":1,
                    }
                ]
            },
            {
                "InstanceFleetType":"TASK",
                "TargetOnDemandCapacity":0,
                "TargetSpotCapacity":100,
                "LaunchSpecifications":{},
                "InstanceTypeConfigs":[
                    {
                        'InstanceType': instanceTypesForTask[0],
                        "WeightedCapacity":1,
                    },
                    {
                        'InstanceType': instanceTypesForTask[1],
                        "WeightedCapacity":2,
                    },
                    {
                        'InstanceType': instanceTypesForTask[2],
                        "WeightedCapacity":4,
                    },
                    {
                        'InstanceType': instanceTypesForTask[3],
                        "WeightedCapacity":8,
                    },
                    {
                        'InstanceType': instanceTypesForTask[4],
                        "WeightedCapacity":12,
                    }
                ],
                "ResizeSpecifications": {
                    "SpotResizeSpecification": {
                        "TimeoutDurationMinutes": 30
                    }
                }
            }
        ]
    }
    response = CLIENT.run_job_flow(
        Name="Test Cluster",
        Instances=instances,
        VisibleToAllUsers=True,
        JobFlowRole="EMR_EC2_DefaultRole",
        ServiceRole="EMR_DefaultRole",
        ReleaseLabel="emr-6.10.0",
    )
 
    return response["JobFlowId"]
 
 
# terminated the cluster using clusterId received in an event
def terminate_cluster(event):
    print("Trying to terminate cluster, clusterId: " + event["detail"]["clusterId"])
    response = CLIENT.terminate_job_flows(JobFlowIds=[event["detail"]["clusterId"]])
    print(f"Terminate cluster response: {response}")
 
 
def describe_cluster(event):
    response = CLIENT.describe_cluster(ClusterId=event["detail"]["clusterId"])
    return response
 
 
def lambda_handler(event, context):
    if is_spot_provisioning_timeout_event(event):
        print(
            "Received spot provisioning timeout event for instanceFleet, clusterId: "
            + event["detail"]["clusterId"]
        )
 
        describeClusterResponse = describe_cluster(event)
 
        shouldTerminateCluster = is_cluster_eligible_for_termination(
            event, describeClusterResponse
        )
        if shouldTerminateCluster:
            terminate_cluster(event)
 
            clusterId = create_cluster(event)
            print("Created a new cluster, clusterId: " + clusterId)
        else:
            print(
                "Cluster is not eligible for termination, clusterId: "
                + event["detail"]["clusterId"]
            )
 
    else:
        print("Received event is not spot provisioning timeout event, skipping")
```

# 将 Ganglia 与 Amazon EMR 结合使用查看集群应用程序指标
<a name="ViewingGangliaMetrics"></a>

Ganglia 可用于 4.2 到 6.15 之间的 Amazon EMR 发行版。Ganglia 是一个开源项目 (可扩展的分布式系统)。旨在监控集群和网格，同时尽量减少对其性能的影响。当您在集群上启用 Ganglia 时，您可以生成报告并查看整个集群的性能，还可以检查单个节点实例的性能。还配置 Ganglia 以提取和可视化 Hadoop 和 Spark 指标。有关更多信息，请参阅《Amazon EMR 版本指南》**中的 [Ganglia](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-ganglia.html)。

# 使用记录 AWS EMR API 调用 AWS CloudTrail
<a name="logging-using-cloudtrail"></a>

AWS EMR 与一项服务集成 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)，该服务提供用户、角色或角色所采取的操作的记录。 AWS 服务 CloudTrail 将 AWS EMR 的所有 API 调用捕获为事件。捕获的调用包括来自 AWS EMR 控制台的调用和对 EMR API 操作的代码调用。 AWS 使用收集的信息 CloudTrail，您可以确定向 AWS EMR 发出的请求、发出请求的 IP 地址、发出请求的时间以及其他详细信息。

每个事件或日志条目都包含有关生成请求的人员信息。身份信息有助于您确定以下内容：
+ 请求是使用根用户凭证还是用户凭证发出的。
+ 请求是否代表 IAM Identity Center 用户发出。
+ 请求是使用角色还是联合用户的临时安全凭证发出的。
+ 请求是否由其他 AWS 服务发出。

CloudTrail 在您创建账户 AWS 账户 时在您的账户中处于活动状态，并且您自动可以访问 CloudTrail **活动历史记录**。 CloudTrail **事件历史记录**提供了过去 90 天中记录的管理事件的可查看、可搜索、可下载且不可变的记录。 AWS 区域有关更多信息，请参阅《*AWS CloudTrail 用户指南》*中的 “[使用 CloudTrail 事件历史记录](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)”。查看**活动历史记录**不 CloudTrail收取任何费用。

要持续记录 AWS 账户 过去 90 天内的事件，请创建跟踪或 [CloudTrailLake](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html) 事件数据存储。

**CloudTrail 步道**  
*跟踪*允许 CloudTrail 将日志文件传输到 Amazon S3 存储桶。使用创建的所有跟踪 AWS 管理控制台 都是多区域的。您可以通过使用 AWS CLI创建单区域或多区域跟踪。建议创建多区域跟踪，因为您可以捕获账户 AWS 区域 中的所有活动。如果您创建单区域跟踪，则只能查看跟踪的 AWS 区域中记录的事件。有关跟踪的更多信息，请参阅《AWS CloudTrail 用户指南》**中的[为您的 AWS 账户创建跟踪](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)和[为组织创建跟踪](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-trail-organization.html)。  
通过创建跟踪，您可以免费将正在进行的管理事件的一份副本传送到您的 Amazon S3 存储桶，但会收取 Amazon S3 存储费用。 CloudTrail 有关 CloudTrail 定价的更多信息，请参阅[AWS CloudTrail 定价](https://aws.amazon.com/cloudtrail/pricing/)。有关 Amazon S3 定价的信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。

**CloudTrail 湖泊事件数据存储**  
CloudTrail L@@ *ak* e 允许你对自己的事件运行基于 SQL 的查询。 CloudTrail Lake 将基于行的 JSON 格式的现有事件转换为 [Apache ORC](https://orc.apache.org/) 格式。ORC 是一种针对快速检索数据进行优化的列式存储格式。事件将被聚合到*事件数据存储*中，它是基于您通过应用[高级事件选择器](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake-concepts.html#adv-event-selectors)选择的条件的不可变的事件集合。应用于事件数据存储的选择器用于控制哪些事件持续存在并可供您查询。有关 CloudTrail Lake 的更多信息，请参阅《*AWS CloudTrail 用户指南》*中的 “[使用 AWS CloudTrail Lake](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html)”。  
CloudTrail 湖泊事件数据存储和查询会产生费用。创建事件数据存储时，您可以选择要用于事件数据存储的[定价选项](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake-manage-costs.html#cloudtrail-lake-manage-costs-pricing-option)。定价选项决定了摄取和存储事件的成本，以及事件数据存储的默认和最长保留期。有关 CloudTrail 定价的更多信息，请参阅[AWS CloudTrail 定价](https://aws.amazon.com/cloudtrail/pricing/)。

## AWS 中的 EMR 数据事件 CloudTrail
<a name="cloudtrail-data-events"></a>

[数据事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html#logging-data-events)可提供对资源或在资源中所执行资源操作（例如，读取或写入 Amazon S3 对象）的相关信息。这些也称为数据面板操作。数据事件通常是高容量活动。默认情况下， CloudTrail 不记录数据事件。 CloudTrail **事件历史**记录不记录数据事件。

记录数据事件将收取额外费用。有关 CloudTrail 定价的更多信息，请参阅[AWS CloudTrail 定价](https://aws.amazon.com/cloudtrail/pricing/)。

您可以使用 CloudTrail 控制台、 AWS CLI或 CloudTrail API 操作记录 AWS EMR 资源类型的数据事件。有关如何记录数据事件的更多信息，请参阅《AWS CloudTrail 用户指南》**中的[使用 AWS 管理控制台记录数据事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html#logging-data-events-console)和[使用 AWS Command Line Interface记录数据事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html#creating-data-event-selectors-with-the-AWS-CLI)。

下表列出了您可以记录数据事件的 AWS EMR 资源类型。**数据事件类型（控制台）**列显示要从控制 CloudTrail 台上的**数据事件类型**列表中选择的值。res **ources.type 值**列显示该`resources.type`值，您将在使用或配置高级事件选择器时指定该值。 AWS CLI CloudTrail APIs“** APIs 记录到的数据 CloudTrail**” 列显示了 CloudTrail 针对该资源类型记录的 API 调用。

有关这些 API 操作的更多信息，请参阅 [Amazon EMR WAL（EMRWAL）CLI 参考](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emrwalcli-ref.html)。Amazon EMR 记录了一些数据 API 操作 CloudTrail ，这些操作是您从不直接调用的 HBase 系统操作。EMRWAL CLI 参考中没有这些操作。


| 数据事件类型（控制台） | resources.type 值 | 数据 APIs 已记录到 CloudTrail | 
| --- | --- | --- | 
| Amazon EMR 预写日志 Workspace |  AWS::EMRWAL::Workspace  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/logging-using-cloudtrail.html)  | 

您可以将高级事件选择器配置为在 `eventName`、`readOnly` 和 `resources.ARN` 字段上进行筛选，从而仅记录那些对您很重要的事件。有关这些字段的更多信息，请参阅《AWS CloudTrail API 参考》**中的 [https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_AdvancedFieldSelector.html](https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_AdvancedFieldSelector.html)。

## AWS 中的 EMR 管理事件 CloudTrail
<a name="cloudtrail-management-events"></a>

[管理事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-management-events-with-cloudtrail.html#logging-management-events)提供有关对中的资源执行的管理操作的信息 AWS 账户。这些也称为控制面板操作。默认情况下， CloudTrail 记录管理事件。

AWS EMR 将所有 AWS EMR 控制平面操作记录为管理事件。[有关 EMR 记录到的 AWS EMR 控制平面操作的列表， CloudTrail请参阅 AWS EMR API 参考。AWS](https://docs.aws.amazon.com/emr/latest/APIReference/Welcome.html)

## AWS EMR 事件示例
<a name="cloudtrail-event-examples"></a>

事件代表来自任何来源的单个请求，包括有关所请求的 API 操作、操作的日期和时间、请求参数等的信息。 CloudTrail 日志文件不是公共 API 调用的有序堆栈跟踪，因此事件不会按任何特定顺序出现。

以下示例显示了演示该**RunJobFlow**操作的 CloudTrail 日志条目。

```
{
	"Records": [
	{
         "eventVersion":"1.01",
         "userIdentity":{
            "type":"IAMUser",
            "principalId":"EX_PRINCIPAL_ID",
            "arn":"arn:aws:iam::123456789012:user/temporary-user-xx-7M",
            "accountId":"123456789012",
            "userName":"temporary-user-xx-7M"
         },
         "eventTime":"2018-03-31T17:59:21Z",
         "eventSource":"elasticmapreduce.amazonaws.com",
         "eventName":"RunJobFlow",
         "awsRegion":"us-west-2",
         "sourceIPAddress":"192.0.2.1",
         "userAgent":"aws-sdk-java/unknown-version Linux/xx Java_HotSpot(TM)_64-Bit_Server_VM/xx",
         "requestParameters":{
            "tags":[
               {
                  "value":"prod",
                  "key":"domain"
               },
               {
                  "value":"us-west-2",
                  "key":"realm"
               },
               {
                  "value":"VERIFICATION",
                  "key":"executionType"
               }
            ],
            "instances":{
               "slaveInstanceType":"m5.xlarge",
               "ec2KeyName":"emr-integtest",
               "instanceCount":1,
               "masterInstanceType":"m5.xlarge",
               "keepJobFlowAliveWhenNoSteps":true,
               "terminationProtected":false
            },
            "visibleToAllUsers":false,
            "name":"MyCluster",
            "ReleaseLabel":"emr-5.16.0"
         },
         "responseElements":{
            "jobFlowId":"j-2WDJCGEG4E6AJ"
         },
         "requestID":"2f482daf-b8fe-11e3-89e7-75a3d0e071c5",
         "eventID":"b348a38d-f744-4097-8b2a-e68c9b424698"
      },
	...additional entries
  ]
}
```

有关 CloudTrail 录音内容的信息，请参阅《*AWS CloudTrail 用户指南》*中的[CloudTrail录制内容](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html)。

# EMR Observability 最佳实践
<a name="emr-metrics-observability"></a>

EMR 可观察性包括对 EM AWS R 集群的全面监控和管理方法。其基础是亚马逊 CloudWatch 作为主要的监控服务，再加上EMR Studio以及Prometheus和Grafana等第三方工具，以提高知名度。本文将探讨集群可观测性的具体方面：

1. *[Spark 可观察性](https://github.com/aws/aws-emr-best-practices/blob/main/website/docs/bestpractices/Applications/Spark/observability.md)* (GitHub) — 关于 Spark 用户界面，亚马逊 EMR 中有三个选项。

1. *[Spark 故障排除](https://github.com/aws/aws-emr-best-practices/blob/main/website/docs/bestpractices/Applications/Spark/troubleshooting.md)* (GitHub)-错误解决方案。

1. *[EMR 集群监控](https://aws.github.io/aws-emr-best-practices/docs/bestpractices/Observability/best_practices/)* (GitHub)-监控集群性能。

1. *[EMR 疑难解答](https://github.com/aws/aws-emr-best-practices/blob/main/website/docs/bestpractices/Troubleshooting/Troubleshooting%20EMR.md)* (GitHub)-识别、诊断和解决常见的 EMR 集群问题。

1. *[成本优化](https://github.com/aws/aws-emr-best-practices/blob/main/website/docs/bestpractices/Cost%20Optimizations/best_practices.md)* (GitHub) — 本节概述了运行经济高效的工作负载的最佳实践。

## 适用于 Apache Spark 应用程序的性能优化工具
<a name="performance-optimization"></a>

1. [AWS EMR Advisor](https://github.com/aws-samples/aws-emr-advisor) 工具分析 Spark 事件日志，为优化 EMR 集群配置、提高性能和降低成本提供量身定制的建议。通过利用历史数据，它建议了理想的执行程序大小和基础设施设置，从而提高资源利用率并提高整体集群性能。

1. [Amazon CodeGuru Profiler](https://github.com/amzn/amazon-codeguru-profiler-for-spark) 工具通过收集和分析运行时数据，帮助开发人员识别 Spark 应用程序中的性能瓶颈和效率低下。该工具可与现有 Spark 应用程序无缝集成，只需最少的设置，并通过 AWS 控制台提供有关 CPU 使用率、内存模式和性能热点的详细见解。