Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用终止保护

在长时间运行的集群上启用终止保护时,您仍然可以终止集群,但您必须先明确地从集群中删除终止保护。这有助于确保 EC2 实例不会因事故或错误而关闭。如果集群可能在本地磁盘中存储了数据,而您又需要在这些实例终止前予以恢复,那么这种终止保护尤其有用。您可以在创建集群时启用终止保护,并可以更改运行的集群上的设置。

启用终止保护后,Amazon EMR API 中的 TerminateJobFlows 操作将不起作用。用户不能使用此 API 或 AWS CLI 中的 terminate-clusters 命令终止集群。该 API 会返回错误,而 CLI 会通过非零返回代码退出。使用 Amazon EMR 控制台终止集群时,系统会提示您执行一个额外的步骤来关闭终止保护。

警告

终止保护不能保证数据在人为错误事件中保留下来或终止保护不是一种解决办法 — 例如,如果在使用 SSH 连接到实例时通过命令行发出重启命令,如果在实例上运行的应用程序或脚本发出重启命令,或如果 Amazon EC2 或 Amazon EMR API 用于禁用终止保护。即使启用终止保护,保存到实例存储的数据(包括 HDFS 数据)也可能丢失。将数据输出写入 Amazon S3 位置并根据业务持续性要求的情况创建备份策略。

终止保护不影响您使用以下任意操作扩展集群资源的能力:

终止保护和 Amazon EC2

启用终止保护的 Amazon EMR 集群已为集群中的所有 Amazon EC2 实例设置了 disableAPITermination 属性。如果终止请求源自 Amazon EMR 且实例的 Amazon EMR 和 Amazon EC2 设置相冲突,那么 Amazon EMR 设置会覆盖 Amazon EC2 设置。例如,如果使用 Amazon EC2 控制台在已禁用终止保护的集群中的 Amazon EC2 实例上启用终止保护,那么当您使用 Amazon EMR 控制台、Amazon EMR 的 AWS CLI 命令或者 Amazon EMR API 来终止集群时,Amazon EMR 会将 DisableApiTermination 设置为 false,并且终止该实例以及其他实例。

重要

如果在具有终止保护功能的 Amazon EMR 集群中创建实例,并使用 Amazon EC2 API 或 AWS CLI 命令来修改该实例,那么 DisableApiTermination 会设置为 false,之后 Amazon EC2 API 或 AWS CLI 命令会执行 TerminateInstances 操作,Amazon EC2 实例也会终止。

终止保护和不正常的 YARN 节点

Amazon EMR 会定期检查集群中核心和任务 Amazon EC2 实例上运行的节点的 Apache Hadoop YARN 状态。运行状况由 NodeManager 运行状况检查程序服务报告。如果节点报告为 UNHEALTHY,那么 Amazon EMR 实例控制器会将该节点列入黑名单,并且在该节点再次恢复正常之前不会向其分配 YARN 容器。节点不正常的常见原因是,磁盘利用率超过 90%。有关识别不正常节点并进行恢复的更多信息,请参阅资源错误

如果节点保持 UNHEALTHY 状态超过 45 分钟,Amazon EMR 将根据终止保护的状态执行以下操作。

终止保护 结果

已启用(推荐)

Amazon EC2 实例仍处于黑名单中,并将继续计入集群容量。您可以连接到 Amazon EC2 实例以进行配置和数据恢复,并调整集群大小以增加容量。有关更多信息,请参阅资源错误

已禁用

Amazon EC2 实例已终止。Amazon EMR 根据实例组中实例的指定数量或实例队列的目标容量预置新实例。如果所有核心节点处于 UNHEALTHY 状态超过 45 分钟,集群将终止,并报告 NO_SLAVES_LEFT 状态。

重要

如果核心实例因状态不正常而被终止,那么 HDFS 数据可能会丢失。如果节点存储了没有复制到其他节点的数据块,那么这些块都将丢失,这可能会导致数据丢失。我们建议您使用终止保护,以便您可以在必要时连接到实例并恢复数据。

终止保护、自动终止和步骤执行

自动终止设置优先于终止保护。如果二者均已启用,那么当步骤执行完时,集群会终止,而不是进入等待状态。

向集群提交步骤时,您可以设置 ActionOnFailure 属性,以确定步骤因错误而无法完成执行时发生的情况。此设置的可能值为 TERMINATE_CLUSTER(早期版本的值为 TERMINATE_JOB_FLOW)、CANCEL_AND_WAITCONTINUE。有关更多信息,请参阅使用 CLI 和控制台执行步骤

当其中 ActionOnFailure 设置为 CANCEL_AND_WAIT 的步骤失败时,如果已启用自动终止,则集群会终止,且不会执行后续步骤。

当其中 ActionOnFailure 设置为 TERMINATE_CLUSTER 的步骤失败时,请使用下面的设置表来确定结果。

ActionOnFailure 自动终止 终止保护 结果

TERMINATE_CLUSTER

已启用

已禁用

集群会终止

已启用

已启用

集群会终止

已禁用

已启用

集群继续运行

已禁用

已禁用

集群会终止

终止保护和 Spot 实例

当 Spot 价格上涨并超过最高 Spot 价格时,Amazon EMR 终止保护不会阻止 Amazon EC2 Spot 实例终止。

启动集群时配置终止保护

您可以使用控制台、AWS CLI 或 API 在启动集群时启用或禁用终止保护。

默认终止保护设置取决于您启动集群的方式:

  • Amazon EMR 控制台的“Quick Options (快速选项)”– 在默认情况下,“Termination Protection (终止保护)”处于已禁用状态。

  • Amazon EMR控制台的“Advanced Options (高级选项)”– 在默认情况下,“Termination Protection (终止保护)”处于已启用状态。

  • AWS CLI aws emr create-cluster –“Termination Protection (终止保护)”将处于已禁用状态,除非指定 --termination-protected

  • Amazon EMR API RunJobFlow 命令 –“Termination Protection (终止保护)”将处于已禁用状态,除非将 TerminationProtected 布尔值设置为 true

使用控制台创建集群时启用或禁用终止保护

  1. 通过以下网址打开 Amazon EMR 控制台:https://console.amazonaws.cn/elasticmapreduce/

  2. 选择 Create cluster

  3. 选择 Go to advanced options (转到高级选项)

  4. 对于 Step 3: General Cluster Settings (步骤 3: 常规集群设置),在 General Options (常规选项) 下,确保选中 Termination protection (终止保护) 以将其启用,或清除选中此选项以将其禁用。

    针对集群创建的“Advanced Options (高级选项)”中的“Termination Protection (终止保护)”设置。
  5. 选择适用于您的应用程序的其他设置,再选择 Next (下一步),然后完成集群配置。

使用 AWS CLI 创建集群时启用终止保护

  • 使用 AWS CLI 时,您可以通过使用带有 --termination-protected 参数的 create-cluster 命令启动启用了终止保护的集群。默认情况下,终止保护处于禁用状态。

    以下示例创建启用了终止保护的集群:

    注意

    包含了 Linux 行继续符 (\) 以提高可读性。可以在 Linux 命令中删除或使用它们。对于 Windows,请删除它们或将其替换为脱字号 (^)。

    aws emr create-cluster --name "TerminationProtectedCluster" --release-label emr-5.23.0 \ --applications Name=Hadoop Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey --instance-type m4.large \ --instance-count 3 --termination-protected

    有关在 AWS CLI 中使用 Amazon EMR 命令的更多信息,请参阅https://docs.amazonaws.cn/cli/latest/reference/emr

为正在运行的集群配置终止保护

您可以使用控制台或 AWS CLI 为运行中的集群配置终止保护。

使用控制台为运行的集群启用或禁用终止保护

  1. 通过以下网址打开 Amazon EMR 控制台:https://console.amazonaws.cn/elasticmapreduce/

  2. Clusters (集群) 页面上,选择集群的 Name (名称)

  3. Summary (摘要) 选项卡上,对于 Termination protection (终止保护),选择 Change (更改)

  4. 要启用终止保护,请选择 On (开启)。要禁用终止保护,请选择 Off (关闭)。然后选择绿色复选标记进行确认。

    
							确认终止保护更改

使用 AWS CLI 为运行的集群启用或禁用终止保护

  • 要使用 AWS CLI 在运行的集群上启用终止保护,请键入带有 --termination-protected 参数的 modify-cluster-attributes 命令。要禁用终止保护,请使用 --no-termination-protected 参数。

    以下示例在 ID 为 j-3KVTXXXXXX7UG 的集群上启用了终止保护:

    aws emr modify-cluster-attributes --cluster-id j-3KVTXXXXXX7UG --termination-protected

    以下示例在相同集群上禁用了终止保护:

    aws emr modify-cluster-attributes --cluster-id j-3KVTXXXXXX7UG --no-termination-protected