

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用終止保護來保護 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 主控台、 AWS CLI或 Amazon EMR API 來終止或縮減叢集，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 命令來修改執行個體，使 `DisableApiTermination`成為 `false`，然後 Amazon EC2 API 或 AWS CLI 命令執行 `TerminateInstances`操作，Amazon EC2 執行個體就會終止。

## 終止保護和運作狀態不佳的 YARN 節點
<a name="emr-termination-protection-unhealthy"></a>

對於在叢集中的核心和任務 Amazon EC2 執行個體上執行的節點，Amazon EMR 會定期檢查 Apache Hadoop YARN 狀態。[NodeManager 運作狀態檢查程式服務](https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/NodeManager.html#Health_checker_service)會報告運作狀態。如果節點報告 `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_tw/emr/latest/ManagementGuide/UsingEMR_TerminationProtection.html)

## 終止保護與 Spot 執行個體
<a name="emr-termination-protection-spot"></a>

在 Spot 價格超出上限時，Amazon EMR 終止保護並不會阻止 Amazon EC2 Spot 執行個體終止。

## 您啟動叢集時設定終止保護
<a name="emr-termination-protection-create-cluster"></a>

您可以在使用主控台 AWS CLI、 或 API 啟動叢集時啟用或停用終止保護。

對於單一節點叢集，預設終止保護設定如下：
+ 透過 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 管理主控台，並在 https：//[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) 開啟 Amazon EMR 主控台。

1. 在左側導覽窗格中的 **EC2 上的 EMR** 下，選擇**叢集**，然後選擇**建立叢集**。

1. 針對 **EMR 發行版本**，選擇 **emr-6.6.0** 或更新版本。

1. 在**叢集終止和節點取代**下，確定已預先選取**使用終止保護**，或清除選取以將其關閉。

1. 選擇適用於您的叢集的任何其他選項。

1. 若要啟動您的叢集，請選擇**建立叢集**。

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

**使用 建立叢集時開啟或關閉終止保護 AWS CLI**
+ 使用 AWS CLI，您可以使用 `create-cluster` `--termination-protected` 參數啟動啟用終止保護的叢集。終止保護預設為停用。

  下列範例會建立終止保護已啟用的叢集：
**注意**  
包含 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 管理主控台，並在 https：//[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) 開啟 Amazon EMR 主控台。

1. 在左側導覽窗格中的 **EC2 上的 EMR** 下，選擇**叢集**，然後選取您要更新的叢集。

1. 在叢集詳細資訊頁面的**屬性**標籤上，尋找**叢集終止**，然後選取**編輯**。

1. 選取或清除**使用終止保護**核取方塊，以開啟或關閉此功能。然後選擇**儲存變更**以確認。

------
#### [ 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
  ```

------