

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

# 為您的 Amazon EMR 叢集規劃和設定執行個體機群
<a name="emr-instance-fleet"></a>

**注意**  
執行個體機群組態只能在 Amazon EMR 4.8.0 版及更新版本 (不含 5.0.0 和 5.0.3 版) 中使用。

Amazon EMR 叢集的執行個體機群組態可讓您為 Amazon EC2 執行個體選取各種佈建選項，並協助您為叢集中的每個節點類型制定靈活有彈性的資源分配策略。

在執行個體機群組態中，您可以為每個機群內的[隨需執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-on-demand-instances.html)與 [Spot 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html)指定*目標容量*。在叢集啟動時，Amazon EMR 會佈建執行個體，直到目標滿足為止。當 Amazon EC2 由於價格增加或執行個體失敗而回收正在執行的叢集中的 Spot 執行個體時，則 Amazon EMR 會嘗試將此執行個體取代為您指定的任何執行個體類型。這能讓 Spot 定價高峰期間重新獲得容量變得更容易。

當您使用 AWS CLI 或 Amazon EC2 API 建立叢集，以及隨需和 Spot 執行個體的[配置策略](#emr-instance-fleet-allocation-strategy)時，每個機群最多可以為 Amazon EMR 指定五個用於實現目標的 Amazon EC2 執行個體類型，或每個機群最多指定 30 個 Amazon EC2 執行個體類型。

您也可以為不同可用區域選擇多個子網路。當 Amazon EMR 啟動叢集時，它會在這些子網路中尋找您指定的執行個體和購買選項。如果 Amazon EMR 在一或多個可用區域中偵測到 AWS 大規模事件，Amazon EMR 會自動嘗試將流量路由離開受影響的可用區域，並根據您的選擇，嘗試啟動您在替代可用區域中建立的新叢集。請注意，叢集可用區域選擇僅在建立叢集時進行。如果可用區域中斷，現有叢集節點不會在新的可用區域中自動重新啟動。

## **使用執行個體機群的考量事項**
<a name="emr-key-feature-summary"></a>

將執行個體機群與 Amazon EMR 搭配使用時，考慮下列事項。
+ 您可以具有一個執行個體機群，每種節點類型 (主要、核心、任務) 只能具有一個執行個體機群。您最多可以為 上的每個機群指定五個 Amazon EC2 執行個體類型 AWS 管理主控台 （或當您使用 AWS CLI 或 Amazon EMR API 和 建立叢集時，每個執行個體機群最多指定 30 個類型[執行個體機群的配置策略](#emr-instance-fleet-allocation-strategy))。
+ Amazon EMR 選擇任一或所有指定的 Amazon EC2 執行個體類型來同時使用 Spot 和隨需購買選項進行佈建。
+ 您可以針對核心機群和任務機群建立適用於 Spot 和隨需執行個體的目標容量。使用計入目標的 vCPU 或指派給每個 Amazon EC2 執行個體的一般單位。直到每個目標容量完全履行為止，Amazon EMR 會佈建執行個體。針對主機群，目標一律為一個。
+ 您可以選擇一個子網路 (可用區域) 或範圍。如果您選擇範圍，Amazon EMR 會在最符合的可用區域中佈建容量。
+ 當您為 Spot 執行個體指定目標容量時：
  + 針對每種執行個體類型，指定最大的 Spot 價格。如果 Spot 價格低於最大 Spot 價格，Amazon EMR 會佈建 Spot 執行個體。您僅需支付該 Spot 價格。
  + 針對每個機群，定義逾時期間以佈建 Spot 執行個體。如果 Amazon EMR 無法佈建 Spot 容量，您可以終止叢集或切換到佈建的隨需容量。這僅適用於佈建叢集，並不適用於調整叢集大小。如果逾時期間在叢集大小調整程序期間結束，則未佈建的 Spot 請求將無效，而不會傳輸至隨需容量。
+ 對於每個機群，您可以為 Spot 執行個體指定下列其中一種配置策略：價格容量最佳化、容量最佳化、capacity-optimized-prioritized、最低價格，或分散在所有集區。
+ 對於每個機群，您可以為隨需執行個體套用下列配置策略：最低價格策略或優先策略。
+ 對於每個具有隨需執行個體的機群，您可以選擇套用容量保留選項。
+ 如果您針對執行個體機群使用配置策略，當您為 EMR 叢集選擇子網路時，會套用下列考量：
  + 當 Amazon EMR 佈建具有任務機群的叢集時，它會篩選掉缺少足夠可用 IP 地址的子網路，以佈建請求 EMR 叢集的所有執行個體。這包括叢集啟動期間主要、核心和任務執行個體機群所需的 IP 地址。然後，Amazon EMR 會利用其配置策略，根據執行個體類型和具有足夠 IP 地址的剩餘子網路來判斷執行個體集區，以啟動叢集。
  + 如果 Amazon EMR 由於可用 IP 地址不足而無法啟動整個叢集，則會嘗試識別具有足夠可用 IP 地址的子網路，以啟動基本 （核心和主要） 執行個體機群。在這種情況下，您的任務執行個體機群將進入暫停狀態，而不是在發生錯誤的情況下終止叢集。
  + 如果沒有任何指定的子網路包含足夠的 IP 地址來佈建基本核心和主要執行個體機群，叢集啟動將會失敗，並顯示 **VALIDATION\$1ERROR**。這會觸發 **CRITICAL** 嚴重性叢集終止事件，通知您叢集無法啟動。為了避免此問題，建議您增加子網路中的 IP 地址數量。
+ 如果您執行 Amazon EMR 發行版本 **emr-7.7.0** 及更高版本，並且對執行個體機群使用配置策略，則可以將叢集擴展至每個執行個體機群最多 4000 個 EC2 執行個體和 14000 個 EBS 磁碟區。對於低於 **emr-7.7.0** 的發行版本，叢集只能擴展至每個執行個體機群 2000 個 EC2 執行個體和 7000 個 EBS 磁碟區。
+ 當您啟動隨需執行個體時，您可以為帳戶中的主要、核心和任務節點使用開放或目標容量保留。使用具有執行個體機群配置策略的隨需執行個體時，可能會看到容量不足。我們建議您指定多個執行個體類型來多樣化，並降低容量不足的機率。如需詳細資訊，請參閱[在 Amazon EMR 中對執行個體機群使用容量保留](on-demand-capacity-reservations.md)。

## 執行個體機群選項
<a name="emr-instance-fleet-options"></a>

請使用下列準則以了解執行個體機群選項。

**Topics**
+ [**設定目標容量**](#emr-fleet-capacity)
+ [**啟動選項**](#emr-fleet-spot-options)
+ [**多個子網路 (可用區域) 選項**](#emr-multiple-subnet-options)
+ [**主節點組態**](#emr-master-node-configuration)

### **設定目標容量**
<a name="emr-fleet-capacity"></a>

指定您需要的核心機群和任務機群目標容量。在您執行此作業時，即會決定隨需執行個體的數量和 Amazon EMR 佈建的 Spot 執行個體。當您指定執行個體時，您將決定每個執行個體計入目標的數量。當隨需執行個體 (On-Demand Instance) 已完成佈建，它會計入隨需的目標。Spot 執行個體也是一樣。與核心和任務機群不同，主機群一律是一個執行個體。因此，針對主機群的目標容量一律為一個。

當您使用主控台時，Amazon EC2 執行個體類型的 vCPU 依預設會用作目標容量的計數。您可以變更此為 **Generic units (一般單位)**，然後為每個 EC2 執行個體類型指定計數。使用 時 AWS CLI，您可以為每個執行個體類型手動指派一般單位。

**重要**  
當您使用 選擇執行個體類型時 AWS 管理主控台，每個**執行個體類型**顯示的 **vCPU** 數量是該執行個體類型的 YARN vcore 數量，而不是該執行個體類型的 EC2 vCPUs 數量。如需有關每種執行個體類型的 vCPU 數量的詳細資訊，請參閱 [Amazon EC2 執行個體類型](https://aws.amazon.com/ec2/instance-types/)。

針對每個機群，您可指定最多 5 種 Amazon EC2 執行個體類型。如果您使用 [執行個體機群的配置策略](#emr-instance-fleet-allocation-strategy)並使用 AWS CLI 或 Amazon EMR API 建立叢集，則每個執行個體機群最多可指定 30 個 EC2 執行個體類型。Amazon EMR 會選擇這些 EC2 執行個體類型的任意組合，以滿足您的目標容量。由於 Amazon EMR 想要完全滿足目標容量，故可能發生超額。例如，如果有 2 個未滿足的單位，而 Amazon EMR 只能以 5 個單位的計數佈建執行個體，該執行個體仍會佈建，這表示該目標容量已超過 3 個單位。

如果您降低目標容量以調整執行中叢集的大小，Amazon EMR 會嘗試完成應用程式任務，並終止執行個體以滿足新的目標。如需詳細資訊，請參閱[於任務完成時終止](emr-scaledown-behavior.md#emr-scaledown-terminate-task)。

### **啟動選項**
<a name="emr-fleet-spot-options"></a>

對於 Spot 執行個體，您可以為機群中的每種執行個體類型指定 **Spot 價格上限**。您可以依隨需價格的百分比或特定的金額來設定此價格。如果目前可用區域中的 Spot 價格低於您的最大 Spot 價格，則 Amazon EMR 會佈建 Spot 執行個體。您僅需支付該 Spot 價格。

**注意**  
從 2021 年 7 月 1 日起，具有定義期間的 Spot 執行個體 (也稱為 Spot 區塊) 不再提供給新客戶。對於先前使用過此功能的客戶，在 2022 年 12 月 31 日之前，我們將繼續支援具有指定期間的 Spot 執行個體。

在 Amazon EMR 5.12.1 及更新版本中可用，您可以選擇啟動具有優化容量配置的 Spot 和隨需執行個體機群。您可以在舊的 中 AWS 管理主控台 或使用 API 設定此配置策略選項`RunJobFlow`。請注意，您無法在新主控台中自訂配置策略。使用配置策略選項需要額外的服務角色許可。如果您對叢集使用預設 Amazon EMR 服務角色和受管政策 ([`EMR_DefaultRole`](emr-iam-role.md) 和 `AmazonEMRServicePolicy_v2`)，則已包含配置策略選項的許可。如果未使用預設 Amazon EMR 服務角色和受管政策，您必須予以新增才能使用此選項。請參閱 [Amazon EMR 的服務角色 (EMR 角色)](emr-iam-role.md)。

如需 Spot 執行個體的詳細資訊，請參閱《Amazon EC2 使用者指南》中的 [Spot 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html)。如需隨需執行個體的詳細資訊，請參閱《Amazon EC2 使用者指南》中的[隨需執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-on-demand-instances.html)。

如果您選擇以價格最低的配置策略啟動隨需執行個體機群，則可以選擇使用容量保留。您可以使用 Amazon EMR API `RunJobFlow` 設定容量保留選項。容量保留需要其他服務角色許可，您必須新增這些許可才能使用這些選項。請參閱 [配置策略許可配置策略所需的 IAM 許可](#create-cluster-allocation-policy)。請注意，您無法在新的主控台中自訂容量保留。

### **多個子網路 (可用區域) 選項**
<a name="emr-multiple-subnet-options"></a>

當您使用執行個體機群時，可以指定 VPC 內的多個 Amazon EC2 子網路，每個對應至不同的可用區域。如果使用的是 EC2-Classic，您會明確指定可用區域。根據您的機群規格，Amazon EMR 會識別啟動執行個體的最佳可用區域。僅一律在一個可用區域中佈建執行個體。您可以選擇私有子網路或公有子網路，但您無法混合兩者，以及您指定的子網路必須位於相同的 VPC。

### **主節點組態**
<a name="emr-master-node-configuration"></a>

由於主要執行個體機群只是單一執行個體，其組態與核心和任務執行個體機群稍有不同。您只需為主要執行個體機群選取隨需或 Spot，因為它只包含一個執行個體。如果您使用主控台來建立執行個體機群，您選取之購買選項的目標容量會設為 1。如果您使用 AWS CLI，請務必視需要`TargetOnDemandCapacity`將 `TargetSpotCapacity`或 設為 1。您仍然可以為主要執行個體機群選擇最多 5 種執行個體類型 (當您使用隨需或 Spot 執行個體的配置策略選項時，最多可選擇 30 種)。不過，與核心和任務執行個體機群不同，其中 Amazon EMR 可能佈建不同類型的多個執行個體，Amazon EMR 會選取單一執行個體類型來為主要執行個體機群進行佈建。

## 執行個體機群的配置策略
<a name="emr-instance-fleet-allocation-strategy"></a>

透過 Amazon EMR 5.12.1 版及更新版本，您可以將配置策略選項與每個叢集節點的隨需和 Spot 執行個體搭配使用。當您將 AWS CLI、Amazon EMR API 或 Amazon EMR 主控台與配置策略搭配使用來建立叢集時，每個機群最多可以指定 30 種 Amazon EC2 執行個體類型。透過預設 Amazon EMR 叢集執行個體機群組態，每個機群最多可以具有 5 種執行個體類型。建議您使用配置策略選項，以實現更快的叢集佈建、更準確的 Spot 執行個體配置，以及更少的 Spot 執行個體中斷。

**Topics**
+ [隨需執行個體的配置策略](#emr-instance-fleet-allocation-strategy-od)
+ [Spot 執行個體的配置策略](#emr-instance-fleet-allocation-strategy-spot)
+ [配置策略許可](#emr-instance-fleet-allocation-strategy-permissions)
+ [配置策略所需的 IAM 許可](#create-cluster-allocation-policy)

### 隨需執行個體的配置策略
<a name="emr-instance-fleet-allocation-strategy-od"></a>

下列配置策略適用於您的隨需執行個體：

`lowest-price`** （預設）**  
價格最低的配置策略會從價格最低且具有可用容量的集區啟動隨需執行個體。如果價格最低的集區沒有可用的容量，則隨需執行個體來自下一個價格最低且具有可用容量的集區。

`prioritized`  
優先配置策略可讓您為執行個體機群的每個執行個體類型指定優先順序值。Amazon EMR 會啟動優先順序最高的隨需執行個體。如果您使用此策略，您必須設定至少一個執行個體類型的優先順序。如果您未設定執行個體類型的優先順序值，Amazon EMR 會將最低優先順序指派給該執行個體類型。叢集中的每個執行個體機群 （主要、核心或任務） 對於指定的執行個體類型可以有不同的優先順序值。

**注意**  
如果您使用**capacity-optimized-prioritized** Spot 配置策略，Amazon EMR 會在您設定優先順序時，將相同的優先順序套用至隨需執行個體和 Spot 執行個體。

### Spot 執行個體的配置策略
<a name="emr-instance-fleet-allocation-strategy-spot"></a>

對於 *Spot 執行個體*，您可以從下列其中一個配置策略中選擇：

**`price-capacity-optimized` (建議) **  
價格容量優化配置策略根據要啟動的執行個體數量從可用容量最高且價格最低的 Spot 執行個體集區中啟動 Spot 執行個體。因此，價格容量最佳化策略通常會有較高的機會取得 Spot 容量，並提供較低的中斷率。這是 Amazon EMR 6.10.0 版和更新版本的預設策略。

**`capacity-optimized`**  
容量優化配置策略會在短期內中斷可能性最低的最可用集區中啟動 Spot 執行個體。對於可能因重新啟動工作而產生較高中斷成本的工作負載來說，這是一個很好的選擇。這是 Amazon EMR 6.9.0 版及更低版本的預設策略。

**`capacity-optimized-prioritized`**  
capacity-optimized-prioritized策略可讓您為執行個體機群中的每個執行個體類型指定優先順序值。Amazon EMR 會先針對容量進行最佳化，但會盡力遵守執行個體類型的優先順序，例如，如果優先順序不會顯著影響機群佈建最佳容量的能力。如果您有工作負載必須具有最低程度的中斷，但仍需要某些執行個體類型，建議您使用此選項。如果您使用此策略，您必須設定至少一個執行個體類型的優先順序。如果您未設定任何執行個體類型的優先順序，Amazon EMR 會將最低優先順序值指派給該執行個體類型。叢集中的每個執行個體機群 （主要、核心或任務） 對於指定的執行個體類型可以有不同的優先順序值。  
如果您使用**優先順序**的隨需配置策略，Amazon EMR 會在您設定優先順序時，將相同的優先順序值套用至隨需執行個體和 Spot 執行個體。

**`diversified`**  
透過多樣化配置策略，Amazon EC2 可將 Spot 執行個體分配在所有 Spot 容量集區中。

**`lowest-price`**  
價格最低的配置策略會從價格最低且具有可用容量的集區中啟動 Spot 執行個體。如果價格最低的集區沒有可用容量，Spot 執行個體來自下一個價格最低且具有可用容量的集區。如果集區在滿足您請求的容量之前用完容量，Amazon EC2 機群將從下一個價格最低的集區中提取容量來滿足您的請求。為確保達到所需的容量，您可能會從數個集區中接收 Spot 執行個體。由於此策略僅考慮執行個體價格，而不考慮容量可用性，因此可能會導致高中斷率。

### 配置策略許可
<a name="emr-instance-fleet-allocation-strategy-permissions"></a>

配置策略選項需要數個自動包含在預設 Amazon EMR 服務角色和 Amazon EMR 受管政策 (`EMR_DefaultRole` 和 `AmazonEMRServicePolicy_v2`) 中的 IAM 許可。如果對叢集使用自訂服務角色或受管政策，您必須在建立叢集之前新增這些許可。如需詳細資訊，請參閱[配置策略許可配置策略所需的 IAM 許可](#create-cluster-allocation-policy)。

當您使用隨需配置策略選項時，選用隨需容量保留 (ODC) 可用。容量保留選項可讓您先為 Amazon EMR 叢集，指定使用預留容量的偏好設定。您可以使用此功能來確保您的關鍵工作負載使用您已使用開放或目標 ODCR 保留的容量。對於非關鍵工作負載，容量保留偏好設定可讓您指定是否應該使用預留容量。

容量保留只能供與其屬性 (執行個體類型、平台和可用區域) 相符的執行個體使用。依預設，Amazon EMR 在佈建與執行個體屬性相符的隨需執行個體時，會自動使用開放容量保留。如果執行中的執行個體沒有一個與容量保留的屬性相符，在您啟動與其屬性相符的執行個體之前，執行個體會保持不用。如果不想在啟動叢集時使用任何容量保留，您必須在啟動選項中將容量保留偏好設定設為**無**。

不過，您也可以針對特定工作負載進行容量保留。這可讓您明確控制哪些執行個體可以在該預留容量中執行。如需有關隨需容量保留的詳細資訊，請參閱 [在 Amazon EMR 中對執行個體機群使用容量保留](on-demand-capacity-reservations.md)。

### 配置策略所需的 IAM 許可
<a name="create-cluster-allocation-policy"></a>

您的 [Amazon EMR 的服務角色 (EMR 角色)](emr-iam-role.md) 需要其他許可才能建立使用隨需或 Spot 執行個體機群配置策略選項的叢集。

我們會自動將這些許可納入預設 Amazon EMR 服務角色 [`EMR_DefaultRole`](emr-iam-role.md) 和 Amazon EMR 受管政策 [`AmazonEMRServicePolicy_v2`](emr-managed-iam-policies.md)。

如果對叢集使用自訂服務角色或受管政策，您必須新增下列許可：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DeleteLaunchTemplate",
        "ec2:CreateLaunchTemplate",
        "ec2:DescribeLaunchTemplates",
        "ec2:CreateLaunchTemplateVersion",
        "ec2:CreateFleet"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowEC2Deletelaunchtemplate"
    }
  ]
}
```

------

建立使用開放或目標容量保留的叢集需要下列服務角色許可。除了使用配置策略選項所需的許可以外，您還必須包含這些許可。

**Example 服務角色容量保留的政策文件**  
若要使用開放容量保留，您必須包含下列其他許可。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeCapacityReservations",
        "ec2:DescribeLaunchTemplateVersions",
        "ec2:DeleteLaunchTemplateVersions"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowEC2Describecapacityreservations"
    }
  ]
}
```

**Example**  
若要使用目標容量保留，您必須包含下列其他許可。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeCapacityReservations",
        "ec2:DescribeLaunchTemplateVersions",
        "ec2:DeleteLaunchTemplateVersions",
        "resource-groups:ListGroupResources"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowEC2Describecapacityreservations"
    }
  ]
}
```

## 為叢集設定執行個體機群
<a name="emr-instance-fleet-console"></a>

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

**使用主控台建立具有執行個體機群的叢集**

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) 開啟 Amazon EMR 主控台。

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

1. 在**叢集組態**下，選擇**執行個體機群**。

1. 針對每個**節點群組**，選取**新增執行個體類型**，然後針對主要和核心執行個體機群選擇最多 5 種執行個體類型，針對任務執行個體機群選擇最多 15 種執行個體類型。Amazon EMR 在啟動叢集時，可以佈建這些執行個體類型的任何混合。

1. 在每個節點群組類型下，選擇每個執行個體旁邊的**動作**下拉式功能表，以變更以下設定：  
**新增 EBS 磁碟區**  
在 Amazon EMR 佈建之後，指定 EBS 磁碟區以附接至執行個體類型。  
**編輯加權容量**  
對於核心節點群組，請將此值變更為適合您應用程式的任何數量的單位。每個機群執行個體類型的 YARN vCores 數量用作預設加權容量單位。您無法編輯主節點的加權容量。  
**編輯 Spot 價格上限**  
為機群中的每種執行個體類型指定最高 Spot 價格。您可以依隨需價格的百分比或特定的金額來設定此價格。如果可用區域中的目前 Spot 價格低於您的最大 Spot 價格，則 Amazon EMR 會佈建 Spot 執行個體。您僅需支付該 Spot 價格。

1. 或者，若要為節點新增安全群組，請展開**聯網**區段中的 **EC2 安全群組 (防火牆)**，然後為每種節點類型選取安全群組。

1. 或者，如果您要使用配置策略選項，請選取**套用配置策略**旁邊的核取方塊，然後選取要為 Spot 執行個體指定的配置策略。如果您的 Amazon EMR 服務角色沒有必要許可，您不應選取此選項。如需詳細資訊，請參閱[執行個體機群的配置策略](#emr-instance-fleet-allocation-strategy)。

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

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

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

若要使用 建立和啟動具有執行個體機群的叢集 AWS CLI，請遵循下列準則：
+ 若要建立和啟動叢集和執行個體叢集，請使用 `create-cluster` 命令以及 `--instance-fleet` 參數。
+ 若要取得有關叢集中執行個體機群的組態詳細資訊，請使用 `list-instance-fleets` 命令。
+ 若要將多個自訂 Amazon Linux AMI 新增至您正在建立的叢集，請將 `CustomAmiId` 選項與每個 `InstanceType` 規格搭配使用。您可以設定具有多個執行個體類型和多個自訂 AMI 的執行個體機群節點，以符合您的需求。請參閱 [範例：使用執行個體機群組態建立叢集](#create-cluster-instance-fleet-cli)。
+ 若要對執行個體機群的目標容量進行變更，請使用 `modify-instance-fleet` 命令。
+ 若要將任務執行個體機群新增至尚未擁有任務執行個體機群的叢集中，請使用 `add-instance-fleet` 命令。
+ 您可以將 CustomAmiId 引數與 add-instance-fleet 命令搭配使用，將多個自訂 AMI 新增至任務執行個體機群。請參閱 [範例：使用執行個體機群組態建立叢集](#create-cluster-instance-fleet-cli)。
+ 若要在建立執行個體機群時使用配置策略選項，請更新服務角色以將範例政策文件納入下一節。
+ 若要在透過隨需配置策略建立執行個體機群時使用容量保留選項，請更新服務角色以將範例政策文件納入下一節。
+ 執行個體機群會自動包含在預設 EMR 服務角色和 Amazon EMR 受管政策 (`EMR_DefaultRole` 和 `AmazonEMRServicePolicy_v2`) 中。如果對叢集使用自訂服務角色或自訂客戶管理政策，您必須在下節中為配置策略新增許可。

------

## 範例：使用執行個體機群組態建立叢集
<a name="create-cluster-instance-fleet-cli"></a>

以下範例示範 `create-cluster` 命令，其中您可以結合多種選項。

**注意**  
如果您先前尚未建立預設 Amazon EMR 服務角色和 EC2 執行個體設定檔，請使用 `aws emr create-default-roles` 來建立這些設定檔，然後再使用 `create-cluster` 命令。

**Example 範例：隨需主要、含單一執行個體類型的隨需核心、預設 VPC**  

```
aws emr create-cluster --release-label emr-5.3.1 --service-role EMR_DefaultRole \
  --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \
  --instance-fleets \
    InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge}'] \
    InstanceFleetType=CORE,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge}']
```

**Example 範例：Spot 主要、含單一執行個體類型的 Spot 核心、預設 VPC**  

```
aws emr create-cluster --release-label emr-5.3.1 --service-role EMR_DefaultRole \
  --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \
  --instance-fleets \
    InstanceFleetType=MASTER,TargetSpotCapacity=1,\
InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5}'] \
    InstanceFleetType=CORE,TargetSpotCapacity=1,\
InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5}']
```

**Example 範例：隨需主要、含單一執行個體類型的混合核心、單一 EC2 子網路**  

```
aws emr create-cluster --release-label emr-5.3.1 --service-role EMR_DefaultRole \
  --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetIds=['subnet-ab12345c'] \
  --instance-fleets \
    InstanceFleetType=MASTER,TargetOnDemandCapacity=1,\
InstanceTypeConfigs=['{InstanceType=m5.xlarge}'] \
    InstanceFleetType=CORE,TargetOnDemandCapacity=2,TargetSpotCapacity=6,\
InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5,WeightedCapacity=2}']
```

**Example 範例：隨需主要，含多個加權執行個體類型的 Spot 核心、Spot 的逾時、EC2 子網路的範圍**  

```
aws emr create-cluster --release-label emr-5.3.1 --service-role EMR_DefaultRole \
  --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetIds=['subnet-ab12345c','subnet-de67890f'] \
  --instance-fleets \
    InstanceFleetType=MASTER,TargetOnDemandCapacity=1,\
InstanceTypeConfigs=['{InstanceType=m5.xlarge}'] \
    InstanceFleetType=CORE,TargetSpotCapacity=11,\
InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5,WeightedCapacity=3}',\
'{InstanceType=m4.2xlarge,BidPrice=0.9,WeightedCapacity=5}'],\
LaunchSpecifications={SpotSpecification='{TimeoutDurationMinutes=120,TimeoutAction=SWITCH_TO_ON_DEMAND}'}
```

**Example 範例：隨需主要，含多個加權執行個體類型的混合核心和任務、核心 Spot 執行個體的逾時、EC2 子網路的範圍**  

```
aws emr create-cluster --release-label emr-5.3.1 --service-role EMR_DefaultRole \
  --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetIds=['subnet-ab12345c','subnet-de67890f'] \
  --instance-fleets \
    InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge}'] \
    InstanceFleetType=CORE,TargetOnDemandCapacity=8,TargetSpotCapacity=6,\
InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5,WeightedCapacity=3}',\
'{InstanceType=m4.2xlarge,BidPrice=0.9,WeightedCapacity=5}'],\
LaunchSpecifications={SpotSpecification='{TimeoutDurationMinutes=120,TimeoutAction=SWITCH_TO_ON_DEMAND}'} \
    InstanceFleetType=TASK,TargetOnDemandCapacity=3,TargetSpotCapacity=3,\
InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5,WeightedCapacity=3}']
```

**Example 範例：Spot 主要、無核心或任務、Amazon EBS 組態、預設 VPC**  

```
aws emr create-cluster --release-label Amazon EMR 5.3.1 --service-role EMR_DefaultRole \ 
  --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \
  --instance-fleets \
    InstanceFleetType=MASTER,TargetSpotCapacity=1,\
LaunchSpecifications={SpotSpecification='{TimeoutDurationMinutes=60,TimeoutAction=TERMINATE_CLUSTER}'},\
InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5,\
EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,\
SizeIn GB=100}},{VolumeSpecification={VolumeType=io1,SizeInGB=100,Iop s=100},VolumesPerInstance=4}]}}']
```

**Example 範例：多個自訂 AMI、多種執行個體類型、隨需主要、隨需核心**  

```
aws emr create-cluster --release-label Amazon EMR 5.3.1 --service-role EMR_DefaultRole \
  --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \
  --instance-fleets \
    InstanceFleetType=MASTER,TargetOnDemandCapacity=1,\
InstanceTypeConfigs=['{InstanceType=m5.xlarge,CustomAmiId=ami-123456},{InstanceType=m6g.xlarge, CustomAmiId=ami-234567}'] \ 
    InstanceFleetType=CORE,TargetOnDemandCapacity=1,\
InstanceTypeConfigs=['{InstanceType=m5.xlarge,CustomAmiId=ami-123456},{InstanceType=m6g.xlarge, CustomAmiId=ami-234567}']
```

**Example 範例：將任務節點新增至具有多種執行個體類型和多個自訂 AMI 的執行中叢集**  

```
aws emr add-instance-fleet --cluster-id j-123456 --release-label Amazon EMR 5.3.1 \
  --service-role EMR_DefaultRole \
  --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \
  --instance-fleet \
    InstanceFleetType=Task,TargetSpotCapacity=1,\
InstanceTypeConfigs=['{InstanceType=m5.xlarge,CustomAmiId=ami-123456}',\
'{InstanceType=m6g.xlarge,CustomAmiId=ami-234567}']
```

**Example 範例：使用 JSON 組態檔案**  
您可以在 JSON 檔案中設定執行個體機群參數，然後參考 JSON 檔案做為執行個體機群的唯一參數。例如，下列命令會參考 JSON 組態檔案 `my-fleet-config.json`：  

```
aws emr create-cluster --release-label emr-5.30.0 --service-role EMR_DefaultRole \
--ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \
--instance-fleets file://my-fleet-config.json
```
*my-fleet-config.json* 檔案會指定主要、核心和任務執行個體機群，如下列範例所示。核心執行個體機群以隨需的百分比形式使用 Spot 價格上限 (`BidPrice`)，同時任務和主要執行個體機群以 USD 的字串形式使用 Spot 價格上限 (BidPriceAsPercentageofOnDemandPrice)。  

```
[
    {
        "Name": "Masterfleet",
        "InstanceFleetType": "MASTER",
        "TargetSpotCapacity": 1,
        "LaunchSpecifications": {
            "SpotSpecification": {
                "TimeoutDurationMinutes": 120,
                "TimeoutAction": "SWITCH_TO_ON_DEMAND"
            }
        },
        "InstanceTypeConfigs": [
            {
                "InstanceType": "m5.xlarge",
                "BidPrice": "0.89"
            }
        ]
    },
    {
        "Name": "Corefleet",
        "InstanceFleetType": "CORE",
        "TargetSpotCapacity": 1,
        "TargetOnDemandCapacity": 1,
        "LaunchSpecifications": {
          "OnDemandSpecification": {
            "AllocationStrategy": "lowest-price",
            "CapacityReservationOptions": 
            {
                "UsageStrategy": "use-capacity-reservations-first",
                "CapacityReservationResourceGroupArn": "String"
            }
        },
            "SpotSpecification": {
                "AllocationStrategy": "capacity-optimized",
                "TimeoutDurationMinutes": 120,
                "TimeoutAction": "TERMINATE_CLUSTER"
            }
        },
        "InstanceTypeConfigs": [
            {
                "InstanceType": "m5.xlarge",
                "BidPriceAsPercentageOfOnDemandPrice": 100
            }
        ]
    },
    {
        "Name": "Taskfleet",
        "InstanceFleetType": "TASK",
        "TargetSpotCapacity": 1,
        "LaunchSpecifications": {
          "OnDemandSpecification": {
            "AllocationStrategy": "lowest-price",
            "CapacityReservationOptions": 
            {
                "CapacityReservationPreference": "none"
            }
        },
            "SpotSpecification": {
                "TimeoutDurationMinutes": 120,
                "TimeoutAction": "TERMINATE_CLUSTER"
            }
        },
        "InstanceTypeConfigs": [
            {
                "InstanceType": "m5.xlarge",
                "BidPrice": "0.89"
            }
        ]
    }
]
```

## 修改執行個體機群的目標容量
<a name="emr-fleet-modify-target-cli"></a>

使用 `modify-instance-fleet` 命令來指定執行個體機群的新目標容量。您必須指定叢集 ID 和執行個體機群 ID。使用 `list-instance-fleets` 命令來擷取執行個體機群 ID。

```
aws emr modify-instance-fleet --cluster-id <cluster-id> \
  --instance-fleet \
    InstanceFleetId='<instance-fleet-id>',TargetOnDemandCapacity=1,TargetSpotCapacity=1
```

## 將任務執行個體機群新增至叢集
<a name="emr-task-instance-fleet"></a>

如果叢集僅有主要和核心執行個體機群，您可以使用 `add-instance-fleet` 命令來新增任務執行個體機群。您只能使用此命令來新增任務執行個體機群。

```
aws emr add-instance-fleet --cluster-id <cluster-id> 
  --instance-fleet \
    InstanceFleetType=TASK,TargetSpotCapacity=1,\
LaunchSpecifications={SpotSpecification='{TimeoutDurationMinutes=20,TimeoutAction=TERMINATE_CLUSTER}'},\
InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5}']
```

## 取得叢集中執行個體機群的組態詳細資訊
<a name="emr-instance-fleet-get-configuration"></a>

使用 `list-instance-fleets` 命令來取得叢集中執行個體機群之組態的詳細資訊。此命令會將叢集 ID 做為輸入。下列範例會針對包含主要任務執行個體群組和核心任務執行個體群組的叢集示範命令及其輸出。如需完整的回應語法，請參閱《Amazon EMR API 參考》**中的 [ListInstanceFleets](https://docs.aws.amazon.com/ElasticMapReduce/latest/API/API_ListInstanceFleets.html)。

```
list-instance-fleets --cluster-id <cluster-id>			
```

```
{
    "InstanceFleets": [
        {
            "Status": {
                "Timeline": {
                    "ReadyDateTime": 1488759094.637,
                    "CreationDateTime": 1488758719.817
                },
                "State": "RUNNING",
                "StateChangeReason": {
                    "Message": ""
                }
            },
            "ProvisionedSpotCapacity": 6,
            "Name": "CORE",
            "InstanceFleetType": "CORE",
            "LaunchSpecifications": {
                "SpotSpecification": {
                    "TimeoutDurationMinutes": 60,
                    "TimeoutAction": "TERMINATE_CLUSTER"
                }
            },
            "ProvisionedOnDemandCapacity": 2,
            "InstanceTypeSpecifications": [
                {
                    "BidPrice": "0.5",
                    "InstanceType": "m5.xlarge",
                    "WeightedCapacity": 2
                }
            ],
            "Id": "if-1ABC2DEFGHIJ3"
        },
        {
            "Status": {
                "Timeline": {
                    "ReadyDateTime": 1488759058.598,
                    "CreationDateTime": 1488758719.811
                },
                "State": "RUNNING",
                "StateChangeReason": {
                    "Message": ""
                }
            },
            "ProvisionedSpotCapacity": 0,
            "Name": "MASTER",
            "InstanceFleetType": "MASTER",
            "ProvisionedOnDemandCapacity": 1,
            "InstanceTypeSpecifications": [
                {
                    "BidPriceAsPercentageOfOnDemandPrice": 100.0,
                    "InstanceType": "m5.xlarge",
                    "WeightedCapacity": 1
                }
            ],
           "Id": "if-2ABC4DEFGHIJ4"
        }
    ]
}
```