使用终止保护 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用终止保护

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

启用终止保护后,Amazon EMR API 中的 TerminateJobFlows 操作将不起作用。用户不能使用此 API 或 Amazon 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 控制台在 disabled(已禁用)终止保护的集群中的 Amazon EC2 实例上 enable(启用)终止保护,则当您使用 Amazon EMR 控制台、适用于 Amazon EMR 的 Amazon CLI 命令或 Amazon EMR API 终止该集群时,Amazon EMR 会将 DisableApiTermination 设置为 false,并终止该实例以及其他实例。

重要

如果在具有终止保护功能的 Amazon EMR 集群中创建实例,并使用 Amazon EC2 API 或 Amazon CLI 命令来修改该实例,那么 DisableApiTermination 会设置为 false,之后 Amazon EC2 API 或 Amazon 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 数据可能会丢失。如果节点存储了没有复制到其它节点的数据块,那么这些块都将丢失,这可能会导致数据丢失。我们建议您使用终止保护,以便您可以在必要时连接到实例并恢复数据。

终止保护和步骤执行

当你启用步骤执行启用终止保护时,Amazon EMR 将忽略终止保护。

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

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

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

ActionOnFailure 步骤执行 终止保护 结果

TERMINATE_CLUSTER

启用

已禁用

集群会终止

启用

启用

集群会终止

已禁用

启用

集群继续运行

已禁用

已禁用

集群会终止

终止保护和竞价型实例

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

启动集群时配置终止保护

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

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

  • Amazon EMR 控制台(新):默认情况下,“终止保护”为已启用

  • Amazon EMR 控制台(旧)快速选项:默认情况下,“终止保护”为禁用

  • Amazon EMR 控制台(旧)高级选项:默认情况下,“终止保护”为已启用

  • Amazon CLI aws emr create-cluster – 除非指定 --termination-protected,否则 Termination Protection (终止保护) 是禁用的。

  • Amazon EMR API RunJobFlow 命令 – 除非 TerminationProtected 布尔值设定为 true,否则 Termination Protection (终止保护) 是禁用的。

注意

我们重新设计了 Amazon EMR 控制台,以便其易于使用。请参阅 控制台中的新增功能,以了解有关新旧控制台体验差异的信息。

New console
使用新控制台创建集群时打开或关闭终止保护
  1. 登录 Amazon Web Services Management Console 并打开 Amazon EMR 控制台,网址为 https://console.aws.amazon.com/emr

  2. 在左侧导航窗格中的 EMR on EC2 下,选择 Clusters(集群),然后选择 Create cluster(创建集群)。

  3. 对于 EMR release version(EMR 发行版),选择 emr-6.6.0 或更高版本。

  4. Cluster termination(集群终止)下,确保预先选择 Use termination protection(使用终止保护),或者清除该选项将其关闭。

  5. 选择适用于集群的任何其他选项。

  6. 要启动集群,选择 Create cluster(创建集群)。

Old console
使用旧控制台创建集群时打开或关闭终止保护
  1. 导航到 Amazon EMR 新控制台,然后从侧面导航栏中选择切换到旧控制台。有关切换到旧控制台后预期情况的更多信息,请参阅 Using the old console

  2. 选择创建集群

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

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

  5. 选择适用于您的应用程序的其它设置,再选择 Next (下一步),然后完成集群配置。

Amazon CLI
使用 Amazon CLI 创建集群时打开或关闭终止保护
  • 借助 Amazon CLI,您可以通过使用带有 --termination-protected 参数的 create-cluster 命令启动已启用终止保护的集群。默认情况下,终止保护处于禁用状态。

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

    注意

    为了便于读取,包含 Linux 行继续符(\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号(^)。

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

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

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

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

注意

我们重新设计了 Amazon EMR 控制台,以便其易于使用。请参阅 控制台中的新增功能,以了解有关新旧控制台体验差异的信息。

New console
使用新控制台为正在运行的集群打开或关闭终止保护
  1. 登录 Amazon Web Services Management Console 并打开 Amazon EMR 控制台,网址为 https://console.aws.amazon.com/emr

  2. 在左侧导航窗格中的 EMR on EC2 下,选择 Clusters(集群),然后选择要更新的集群。

  3. 在集群详细信息页面的 Properties(属性)选项卡上,找到 Cluster termination(集群终止),然后选择 Edit(编辑)。

  4. 选中或清除 Use termination protection(使用终止保护)复选框以打开或关闭该功能。然后选择 Save changes(保存更改)进行确认。

Old console
使用旧控制台为正在运行的集群打开或关闭终止保护
  1. 导航到 Amazon EMR 新控制台,然后从侧面导航栏中选择切换到旧控制台。有关切换到旧控制台后预期情况的更多信息,请参阅 Using the old console

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

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

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

Amazon CLI
使用 Amazon CLI 为正在运行的集群打开或关闭终止保护
  • 要使用 Amazon 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