

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

# 使用终止保护功能防止 Amazon EMR 集群意外关闭
<a name="UsingEMR_TerminationProtection"></a>

终止保护可防止集群意外终止，这对于处理关键工作负载的长时间运行的集群特别有用。在长时间运行的集群上启用终止保护时，您仍然可以终止集群，但您必须先明确地从集群中删除终止保护。这有助于确保 EC2 实例不会因事故或错误而关闭。您可以在创建集群时启用终止保护，并可以更改运行的集群上的设置。

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

**警告**  
终止保护不保证在发生人为错误或实施解决方法时保留数据：例如，使用 SSH 连接到实例时从命令行发出重新启动命令、实例上运行的应用程序或脚本发出重新启动命令，或者使用 Amazon EC2 或 Amazon EMR API 禁用终止保护。如果您运行的是 Amazon EMR 7.1 及更高版本，而实例运行状况不佳且无法恢复，则也是如此。即使启用了终止保护，保存到实例存储的数据（包括 HDFS 数据）也可能会丢失。将数据输出写入 Amazon S3 位置，并根据您的业务连续性要求创建适当的备份策略。

终止保护不影响您使用以下任意操作扩展集群资源的能力：
+ 使用 AWS 管理控制台 或 AWS CLI手动调整集群的大小。有关更多信息，请参阅 [手动调整正在运行的 Amazon EMR 集群的大小](emr-manage-resize.md)。
+ 搭配使用缩减策略和自动扩展，将实例从核心或任务实例组中删除。有关更多信息，请参阅[将自动扩展与 Amazon EMR 中实例组的自定义策略结合使用](emr-automatic-scaling.md)。
+ 通过减少目标容量，将实例从实例队列中删除。有关更多信息，请参阅[实例集选项](emr-instance-fleet.md#emr-instance-fleet-options)。

## 终止保护和 Amazon EC2
<a name="emr-termination-protection-ec2"></a>

Amazon EMR 集群中的终止保护设置与集群中所有 Amazon EC2 实例的 `DisableApiTermination` 属性对应。例如，如果在 EMR 集群中启用了终止保护，则 Amazon EMR 会自动将 EMR 集群中所有 EC2 实例的 `DisableApiTermination` 设置为 true。如果禁用终止保护，也同样适用。对于 EMR 集群中的所有 EC2 实例，Amazon EMR 会自动将 `DisableApiTermination` 设置为 false。如果您终止或缩减了 Amazon EMR 中的集群，并且某个 EC2 实例的 Amazon EC2 设置存在冲突，则 Amazon EMR 会优先考虑 Amazon EMR 设置，而不是 Amazon EC2 中的 `DisableApiStop` 和 `DisableApiTermination` 设置，并继续终止 EC2 实例。

例如，您可以使用 Amazon EC2 控制台在禁用终止保护的 EMR 集群中的 Amazon EC2 实例上启用终止保护。如果您使用 Amazon EMR 控制台、或 Amazon EMR API 终止或缩减集群 AWS CLI，则 Amazon EMR 会覆盖该`DisableApiTermination`设置，将其设置为 false，然后终止该实例以及其他实例。

您也可以使用 Amazon EC2 控制台在禁用终止保护的 EMR 集群中的 Amazon EC2 实例上启用停止保护。如果终止或缩减集群，Amazon EMR 会在 Amazon EC2 中将 `DisableApiStop` 设置为 false，然后终止该实例及其他实例。

只有在您终止或缩减集群时，Amazon EMR 才会覆盖 `DisableApiStop` 设置。在 EMR 集群中启用或禁用终止保护时，Amazon EMR 不会更改相应 EMR 集群中任何 EC2 实例的 `disableApiStop` 设置。

**重要**  
如果您创建实例作为具有终止保护的 Amazon EMR 集群的一部分，然后使用 Amazon EC2 API 或 AWS CLI 命令按原样修改实例`false`，然后 Amazon EC2 API 或 AWS CLI 命令运行该`TerminateInstances`操作，则 Amazon EC2 实例将终止。`DisableApiTermination`

## 终止保护和不正常的 YARN 节点
<a name="emr-termination-protection-unhealthy"></a>

Amazon EMR 会定期检查集群中核心和任务 Amazon EC2 实例上运行的节点的 Apache Hadoop YARN 状态。健康状况由运行状况[检查器服务](https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/NodeManager.html#Health_checker_service)报告。NodeManager 如果某个节点报告 `UNHEALTHY`，Amazon EMR 实例控制器将节点添加到拒绝列表，并且在恢复正常之前，不会为其分配 YARN 容器。根据终止保护、运行状况不佳的节点替换和 Amazon EMR 发行版的状态，Amazon EMR 将[替换运行状况不佳的实例或停止向实例分配控制器](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-node-replacement.html)。

## 终止保护和步骤执行后终止
<a name="emr-termination-protection-steps"></a>

当您启用步骤执行后终止*并*启用终止保护时，Amazon EMR 将忽略终止保护。

向集群提交步骤时，您可以设置 `ActionOnFailure` 属性，以确定步骤因错误而无法完成执行时发生的情况。此设置的可能值为 `TERMINATE_CLUSTER`（早期版本的值为 `TERMINATE_JOB_FLOW`）、`CANCEL_AND_WAIT` 和 `CONTINUE`。有关更多信息，请参阅 [将工作提交到 Amazon EMR 集群](emr-work-with-steps.md)。

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

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ManagementGuide/UsingEMR_TerminationProtection.html)

## 终止保护和竞价型实例
<a name="emr-termination-protection-spot"></a>

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

## 启动集群时配置终止保护
<a name="emr-termination-protection-create-cluster"></a>

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

对于单节点集群，默认终止保护设置如下：
+ 通过 Amazon EMR 控制台启动集群：默认情况下终止保护处于**禁用**状态。
+ 除非指定 AWS CLI `aws emr create-cluster`终止保护，否则`--termination-protected`通过—启动集群将处于**禁用状态**。
+ 通过 Amazon EMR API [RunJobFlow](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/API_RunJobFlow)命令启动集群-除非将`TerminationProtected`布尔值设置为，否则终止保护**将被禁用**。`true`

对于高可用性集群，默认终止保护设置如下：
+ 通过 Amazon EMR 控制台启动集群：默认情况下终止保护处于**启用**状态。
+ 除非指定 AWS CLI `aws emr create-cluster`终止保护，否则`--termination-protected`通过—启动集群将处于**禁用状态**。
+ 通过 Amazon EMR API [RunJobFlow](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/API_RunJobFlow)命令启动集群-除非将`TerminationProtected`布尔值设置为，否则终止保护**将被禁用**。`true`

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

**使用控制台创建集群时开启或关闭终止保护**

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

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

1. 对于 **EMR release version**（EMR 发行版），选择 **emr-6.6.0** 或更高版本。

1. 在**集群终止和节点替换**下，确保已预先选择**使用终止保护**，或者清除该选项以将其关闭。

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

1. 要启动集群，选择 **Create cluster**（创建集群）。

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

**要在创建集群时使用开启或关闭终止保护 AWS CLI**
+ 使用 AWS CLI，您可以使用带`--termination-protected`参数的`create-cluster`命令启动启用了终止保护的集群。默认情况下，终止保护处于禁用状态。

  以下示例创建启用了终止保护的集群：
**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 Linux 命令删除或使用。对于 Windows，请将它们删除或替换为脱字号（^）。

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

  有关在中使用 Amazon EMR 命令的更多信息 AWS CLI，请参阅。[https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)

------

## 为正在运行的集群配置终止保护
<a name="emr-termination-protection-running-cluster"></a>

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

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

**使用控制台为正在运行的集群开启或关闭终止保护**

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

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

1. 在集群详细信息页面的 **Properties**（属性）选项卡上，找到 **Cluster termination**（集群终止），然后选择 **Edit**（编辑）。

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

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

**要为正在运行的集群开启或关闭终止保护，请使用 AWS CLI**
+ 要使用 AWS CLI为正在运行的集群启用终止保护，请使用带有 `--termination-protected` 参数的 `modify-cluster-attributes` 命令。要禁用终止保护，请使用 `--no-termination-protected` 参数。

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

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

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

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

------