

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

# 設定 Spot 執行個體的 Amazon EMR 叢集執行個體類型和最佳實務
<a name="emr-plan-instances-guidelines"></a>

使用此區段中的指導方針，以協助您判斷執行個體類型、購買選項，以及在 EMR 叢集中每個節點類型要佈建的儲存量。

## 您應使用哪一種執行個體類型？
<a name="emr-instance-group-size"></a>

有數種方式可將 Amazon EC2 執行個體新增至叢集。您應選擇的方法取決於您是使用執行個體群組組態還是叢集的執行個體機群組態。
+ **執行個體群組**
  + 手動將相同類型的執行個體新增到現有核心和任務執行個體群組。
  + 手動新增任務執行個體群組，這些群組可以使用不同的執行個體類型。
  + 在 Amazon EMR 中為執行個體群組設定自動擴展，根據您指定的 Amazon CloudWatch 指標值來自動新增和移除執行個體。如需詳細資訊，請參閱[使用 Amazon EMR 叢集擴展來調整不斷變化的工作負載](emr-scale-on-demand.md)。
+ **執行個體機群**
  + 新增單一任務執行個體機群。
  + 針對現有核心和任務執行個體機群，變更隨需和 Spot 執行個體的目標容量。如需詳細資訊，請參閱[為您的 Amazon EMR 叢集規劃和設定執行個體機群](emr-instance-fleet.md)。

計劃叢集執行個體的其中一種方法即是使用代表範例資料集來執行測試叢集並監控叢集中節點的使用率。如需詳細資訊，請參閱[在執行工作時檢視和監控 Amazon EMR 叢集](emr-manage-view.md)。另一個方式是計算您考慮使用之執行個體的容量，並再將該值與您的資料大小進行比對。

一般而言，主節點類型，它會指派任務，不需要大量的 EC2 執行個體的處理能力；適用於 Amazon EC2 執行個體的核心節點類型，處理任務，並將資料儲存在 HDFS，需要兩個處理能力和儲存容量；適用於任務節點類型的 Amazon EC2 執行個體，不會儲存資料，只需處理能力。如需有關可用 Amazon EC2 執行個體及其組態的指導方針，請參閱 [設定 Amazon EC2 執行個體類型以搭配 Amazon EMR 使用](emr-plan-ec2-instances.md)。

 下列指導方針適用於大部分 Amazon EMR 叢集。
+ 您在 AWS 帳戶上執行的隨需 Amazon EC2 執行個體總數有 vCPU 限制 AWS 區域。如需有關 vCPU 限制以及如何為帳戶請求提高限制的詳細資訊，請參閱《Amazon EC2 Linux 執行個體使用者指南》****中的[隨需執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-on-demand-instances.html)。
+ 主節點通常不會有大量的運算需求。對於具有大量節點的叢集，或具有專門部署在主節點 (JupyterHub、Hue 等) 上的應用程式的叢集，可能需要較大的主節點，並有助於改善叢集效能。例如，請考慮將 m5.xlarge 執行個體用於小型叢集 (50 個或更少節點)，並針對較大的叢集增加到較大的執行個體類型。
+ 核心和任務節點的運算需求取決於的應用程式所執行的處理類型。您可以在一般用途執行個體類型上執行許多作業，其會根據 CPU、磁碟空間和輸入/輸出提供平衡效能。運算密集型叢集可能受惠於在 CPU 密集型執行個體上 (其在擁有的 CPU 比例大於 RAM)。資料庫和記憶體快取應用程式可能受益於在記憶體密集型執行個體上執行。網路密集型和 CPU 密集型應用程式 (如剖析、NLP 和機器學習) 可能會受益於在叢集運算執行個體上執行，其會提供較高比例的 CPU 資源與更高的網路效能。
+ 如果叢集的不同階段有不同的容量需求，您可以先從小量的核心節點開始，然後增加或降低任務節點數以滿足任務流程的各種容量需求。
+ 您可以處理的資料量取決於核心節點的容量與處理期間做為輸入和輸出之資料的大小。中繼的輸入和輸出資料集在處理期間皆位於叢集上。

## 您應何時使用 Spot 執行個體？
<a name="emr-plan-spot-instances"></a>

在 Amazon EMR 中啟動叢集時，您可以選擇在 Spot 執行個體上啟動主要、核心或任務執行個體。由於每種執行個體群組在叢集中扮演不同的角色，因此會在 Spot 執行個體上啟動每個節點類型。叢集執行時，您無法變更執行個體的購買選項。若要將隨需執行個體變更為 Spot 執行個體 (或反之亦然)，對於主節點和核心節點，您必須終止叢集並啟動新的叢集。對於任務節點，您可以啟動新的任務執行個體群組或執行個體機群，並移除舊的任務執行個體群組或執行個體機群。

**Topics**
+ [Amazon EMR 設定可避免由於任務節點 Spot 執行個體終止而造成的作業失敗](#emr-plan-spot-YARN)
+ [Spot 執行個體上的主節點](#emr-dev-master-instance-group-spot)
+ [Spot 執行個體上的核心節點](#emr-dev-core-instance-group-spot)
+ [Spot 執行個體上的任務節點](#emr-dev-task-instance-group-spot)
+ [應用程式案例的執行個體組態](#emr-plan-spot-scenarios)

### Amazon EMR 設定可避免由於任務節點 Spot 執行個體終止而造成的作業失敗
<a name="emr-plan-spot-YARN"></a>

由於 Spot 執行個體通常用於執行作業節點，因此 Amazon EMR 具有排程 YARN 作業的預設功能，因此當 Spot 執行個體上執行的作業節點終止時，執行作業不會失敗。Amazon EMR 透過允許應用程式主程序僅在核心節點上執行來達到此目的。應用程式主程序會控制執行中的作業，而且需要在作業生命週期內保持活動狀態。

Amazon EMR 5.19.0 版及更新版本使用內建 [YARN 節點標籤](https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/NodeLabel.html)功能來實現此目的。(較早版本使用代碼修補程式)。預設會設定 `yarn-site` 和 `capacity-scheduler` 組態分類中的屬性，以便 YARN capacity-scheduler 和 fair-scheduler 利用節點標籤。Amazon EMR 會自動為核心節點加上 `CORE` 標籤，並設定屬性，以便只在具有 CORE 標籤的節點上排程應用程式主節點。手動修改 yarn-site 和 capacity-scheduler 組態分類中的相關屬性，或直接修改關聯的 XML 檔案中的相關屬性，可能會破壞此功能或修改此功能。

Amazon EMR 預設會設定下列屬性和值。設定這些屬性時請務必小心。

**注意**  
從 Amazon EMR 6.x 版系列開始，YARN 節點標籤功能已預設為停用。依預設，應用程式主程序可以在核心和任務節點上執行。您可以透過設定以下屬性來啟用 YARN 節點標籤功能：  
`yarn.node-labels.enabled: true`
`yarn.node-labels.am.default-node-label-expression: 'CORE'`
+ **所有節點上的 yarn-site (yarn-site.xml)**
  + `yarn.node-labels.enabled: true`
  + `yarn.node-labels.am.default-node-label-expression: 'CORE'`
  + `yarn.node-labels.fs-store.root-dir: '/apps/yarn/nodelabels'`
  + `yarn.node-labels.configuration-type: 'distributed'`
+ **主節點和核心節點上的 yarn-site (yarn-site.xml)**
  + `yarn.nodemanager.node-labels.provider: 'config'`
  + `yarn.nodemanager.node-labels.provider.configured-node-partition: 'CORE'`
+ **所有節點上的 capacity-scheduler (capacity-scheduler.xml)**
  + `yarn.scheduler.capacity.root.accessible-node-labels: '*'`
  + `yarn.scheduler.capacity.root.accessible-node-labels.CORE.capacity: 100`
  + `yarn.scheduler.capacity.root.default.accessible-node-labels: '*'`
  + `yarn.scheduler.capacity.root.default.accessible-node-labels.CORE.capacity: 100`

### Spot 執行個體上的主節點
<a name="emr-dev-master-instance-group-spot"></a>

主節點會控制和引導叢集。主節點終止時，叢集便會結束，因此如果您執行的叢集可接受突然的終止時，您應僅以 Spot 執行個體的形式啟動主節點。如果您測試的是新應用程式就可能適用此狀況，讓叢集定期將資料保存在外部存放區 (例如 Amazon S3) 或執行的是成本較確保叢集完成還重要的叢集。

當您以 Spot 執行個體啟動主要執行個體群組，叢集在 Spot 執行個體要求履行前都不會啟動。這是在選取 Spot 價格上限時需考量的因素。

您只能在啟動叢集時新增 Spot 執行個體主節點。您無法從執行中叢集新增或移除主節點。

一般而言，如果您以 Spot 執行個體的形式執行整個叢集 (所有執行個體群組)，您只會以 Spot 執行個體的形式執行主節點。

### Spot 執行個體上的核心節點
<a name="emr-dev-core-instance-group-spot"></a>

核心節點會使用 HDFS 來處理資料和存放資訊。終止核心執行個體會導致資料遺失的風險。因此，只有在能夠承受部分 HDFS 資料遺失的情況下，才應該在 Spot 執行個體上執行核心節點。

以 Spot 執行個體的形式啟動核心執行個體群組時，Amazon EMR 在啟動執行個體群組前，會等待直到其可以佈建所有請求的核心執行個體。換句話說，如果您請求 6 個 Amazon EC2 執行個體，但只有 5 個執行個體的可用價格等於或低於最高 Spot 價格，則執行個體群組不會啟動。Amazon EMR 會持續等到 6 個 Amazon EC2 執行個體都可用，或直到您終止叢集為止。您可以變更核心執行個體群組中的 Spot 執行個體數量，以便增加執行中叢集的容量。如需使用執行個體群組以及 Spot 執行個體如何使用執行個體機群的詳細資訊，請參閱[使用執行個體機群或統一執行個體群組建立 Amazon EMR 叢集](emr-instance-group-configuration.md)。

### Spot 執行個體上的任務節點
<a name="emr-dev-task-instance-group-spot"></a>

任務節點會處理資料，但不會在 HDFS 中保存持久性資料。如果因為 Spot 價格已超出您的 Spot 價格上限，而導致任務節點終止，則資料不會遺失，且對您叢集的影響可降到最低。

當您以 Spot 執行個體的形式啟動一或多個任務執行個體群組，Amazon EMR 會使用您的 Spot 價格上限來盡可能佈建任務節點。這表示如果您請求的任務執行個體群組有 6 個節點，但只有 5 個執行個體的可用價格等於或低於最高 Spot 價格，則 Amazon EMR 會啟動具有 5 個節點的執行個體群組，並在隨後新增第 6 個節點。

以 Spot 執行個體的形式啟動任務執行個體群組是一種策略，可讓您擴展叢集容量，並同時將成本降到最低。如果您以隨需執行個體的形式啟動主節點和核心執行個體群組，即可保證其容量足以執行叢集。您可以視需要將任務執行個體新增到您的任務執行個體群組，來處理尖峰流量或加快資料處理的速度。

您可以使用 主控台或 API 新增 AWS CLI或移除任務節點。您也可以新增額外的任務群組，但您無法在建立任務群組之後將其移除。

### 應用程式案例的執行個體組態
<a name="emr-plan-spot-scenarios"></a>

下表是節點類型購買選項和設定的快速參考，這些選項和設定通常適用於各種應用程式案例。選擇連結檢視有關每個案例類型的詳細資訊。


| 應用程式案例 | 主節點購買選項 | 核心節點購買選項 | 任務節點購買選項 | 
| --- | --- | --- | --- | 
| [長時間執行的叢集和資料倉儲](#emr-dev-when-use-spot-data-warehouses) | On-Demand | 隨需執行個體或執行個體機群的混合 | Spot 或執行個體機群的混合 | 
| [成本導向工作負載](#emr-dev-when-use-spot-cost-driven) | Spot | Spot | Spot | 
| [資料關鍵工作負載](#emr-dev-when-use-spot-data-critical) | On-Demand | On-Demand | Spot 或執行個體機群的混合 | 
| [應用程式測試](#emr-dev-when-use-spot-application-testing) | Spot | Spot | Spot | 

 在某些情況下，Spot 執行個體對於執行 Amazon EMR 叢集很有用。

#### 長時間執行的叢集和資料倉儲
<a name="emr-dev-when-use-spot-data-warehouses"></a>

如果您執行的持久性 Amazon EMR 叢集在運算容量具有可預測變異 (例如資料倉儲)，您可以使用 Spot 執行個體以較低的成本來處理峰值需求。您可以隨需執行個體的形式啟動主要和核心執行個體群組來處理正常的容量，並以 Spot 執行個體的形式啟動任務執行個體群組來處理您的最高負載需求。

#### 成本導向工作負載
<a name="emr-dev-when-use-spot-cost-driven"></a>

如果您執行的是暫時性叢集，其中降低成本較完成時間更為重要，以及遺失部分工作是可接受的，您可以 Spot 執行個體的形式執行整個叢集 (主要、核心和任務執行個體群組)，來獲得節省最多成本的好處。

#### 資料關鍵工作負載
<a name="emr-dev-when-use-spot-data-critical"></a>

如果您執行的是叢集，其中降低成本較完成時間更為重要，但不可遺失部分工作時，以隨需執行個體方式來執行主要和核心執行個體群組，並透過 Spot 執行個體的一或多個任務執行個體群組補充。以隨需執行個體的形式執行主要和核心執行個體群組來確保您的資料可保存在 HDFS 中且叢集會受因 Spot 市場波動而終止的保護，同時因以 Spot 執行個體的形式執行任務執行個體群組而節省成本。

#### 應用程式測試
<a name="emr-dev-when-use-spot-application-testing"></a>

當您測試新的應用程式，以便準備讓其在生產環境中啟動，您可透過 Spot 執行個體的形式執行整個叢集 (主要、核心和任務執行個體群組) 來降低測試成本。

## 計算叢集的必要 HDFS 容量
<a name="emr-plan-instances-hdfs"></a>

 您叢集可用的 HDFS 儲存量取決於下列因素：
+ 用於核心節點的 Amazon EC2 執行個體數。
+ 會針對執行個體類型使用 Amazon EC2 執行個體儲存體的容量。如需執行個體存放區磁碟區的詳細資訊，請參閱[《Amazon EC2 使用者指南》中的 Amazon Amazon EC2 執行個體存放](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html)區。 *Amazon EC2 *
+ 附接至核心節點之 Amazon EBS 磁碟區的數量和大小。
+ 複寫係數，其會針對類似 RAID 的備援計算在 HDFS 上每個資料區塊的存放方式。根據預設，對 10 個或多個核心節點的叢集複寫係數是三，對於 4-9 個核心節點的叢集是二，以及三個或較少的節點的叢集是一。

若要對每個核心節點計算叢集的 HDFS 容量，請將執行個體儲存體磁碟區容量新增至 Amazon EBS 儲存容量 (如果有使用的話)。將結果乘以核心節點數，然後根據核心節點數將總數除以複寫係數。例如，含類型為 i2.xlarge 之 10 個核心節點叢集，其中有 800 GB 執行個體儲存體，而沒有任何附接的 Amazon EBS 磁碟區，總共會有大約 2,666 GB 可用於 HDFS (10 個節點 x 800 GB ÷ 3 複寫係數)。

 如果計算 HDFS 容量值小於您的資料，您可以透過下列方式增加 HDFS 儲存量：
+ 建立含額外 Amazon EBS 磁碟區的叢集或新增含對現有叢集有附接 Amazon EBS 磁碟區的執行個體群組
+ 新增更多核心節點
+ 選擇含更多儲存容量的 Amazon EC2 執行個體類型
+ 使用資料壓縮
+ 變更 Hadoop 組態設定以減少複寫係數

請務必小心減少複寫因素，因為其會減少 HDFS 資料備援，以及您從遺失或毀損的 HDFS 區塊中復原的叢集能力。