

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

# 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")
```