

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

# 在 Amazon EMR 中對執行個體機群使用容量保留
<a name="on-demand-capacity-reservations"></a>

若要啟動具有容量保留選項的隨需執行個體機群，請附接使用容量保留選項所需的其他服務角色許可。由於容量保留選項必須與隨需配置策略一起使用，因此您也必須在服務角色和受管政策中包含配置策略所需的許可。如需詳細資訊，請參閱[配置策略許可配置策略所需的 IAM 許可](emr-instance-fleet.md#create-cluster-allocation-policy)。

Amazon EMR 同時支援開放和目標容量保留。下列主題顯示可與 `RunJobFlow` 動作或 `create-cluster` 命令搭配使用的執行個體機群組態，以使用隨需容量保留來啟動執行個體機群。

## 盡量使用開放容量保留
<a name="on-demand-capacity-reservations-best-effort"></a>

如果叢集的隨需執行個體與您帳戶中可用的開放容量保留 (執行個體類型、平台、租用和可用區域) 的屬性相符，則會自動套用容量保留。但是，並不保證會使用您的容量保留。對於佈建叢集，Amazon EMR 會評估啟動請求中指定的所有執行個體集區，並使用價格最低且容量足以啟動所有請求的核心節點的執行個體集區。系統會自動套用與執行個體集區相符的可用開放容量保留。如果可用的開放容量保留與執行個體集區不符，則保持未使用狀態。

佈建核心節點後，即會選取並修正可用區域。Amazon EMR 在選取的可用區域中將任務節點佈建到執行個體集區中，從價格最低的節點開始，直到佈建所有任務節點為止。系統會自動套用與執行個體集區相符的可用開放容量保留。

以下是 Amazon EMR 容量配置邏輯的使用案例，可盡量使用開放容量保留。

**範例 1：啟動請求中價格最低的執行個體集區具有可用的開放容量保留**

在這種情況下，Amazon EMR 會透過隨需執行個體在價格最低的執行個體集區中啟動容量。系統會自動使用該執行個體集區中的可用開放容量保留。


|  |  | 
| --- |--- |
| On-Demand Strategy | lowest-price | 
| Requested Capacity | 100 | 
| Instance Type | c5.xlarge | m5.xlarge | r5.xlarge | 
| Available Open capacity reservations | 150 | 100 | 100 | 
| On-Demand Price | \$1 | \$1\$1 | \$1\$1\$1 | 
| 佈建的執行個體 | 100 | - | - | 
| --- |--- |--- |--- |
| 使用的開放容量保留 | 100 | - | - | 
| --- |--- |--- |--- |
| 可用的開放容量保留 | 50 | 100 | 100 | 
| --- |--- |--- |--- |

啟動執行個體機群後，您可以執行 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html) 以查看未使用的容量保留的剩餘數量。

**範例 2：啟動請求中價格最低的執行個體集區沒有可用的開放容量保留**

在這種情況下，Amazon EMR 會透過隨需執行個體在價格最低的執行個體集區中啟動容量。但是，您的開放容量保留保持未使用狀態。


|  |  | 
| --- |--- |
| On-Demand Strategy | lowest-price | 
| Requested Capacity | 100 | 
| Instance Type | c5.xlarge | m5.xlarge | r5.xlarge | 
|  可用的開放容量保留  | - | - | 100 | 
| On-Demand Price | \$1 | \$1\$1 | \$1\$1\$1 | 
| 佈建的執行個體 | 100 | - | - | 
| --- |--- |--- |--- |
| 使用的開放容量保留 | - | - | - | 
| --- |--- |--- |--- |
| 可用的開放容量保留 | - | - | 100 | 
| --- |--- |--- |--- |

**設定執行個體機群以盡量使用開放容量保留**

當您使用 `RunJobFlow` 動作建立執行個體機群型叢集時，將隨需配置策略設定為 `lowest-price`，將容量保留選項的 `CapacityReservationPreference` 設定為 `open`。或者，如果您將此欄位保留空白，Amazon EMR 會將隨需執行個體的容量保留偏好設定預設為 `open`。

```
"LaunchSpecifications": 
    {"OnDemandSpecification": {
        "AllocationStrategy": "lowest-price",
        "CapacityReservationOptions":
         {
            "CapacityReservationPreference": "open"
         }
        }
    }
```

您也可以使用 Amazon EMR CLI 建立使用開放容量保留的執行個體機群型叢集。

```
aws emr create-cluster \
	--name 'open-ODCR-cluster' \
	--release-label emr-5.30.0 \
	--service-role EMR_DefaultRole \
	--ec2-attributes SubnetId=subnet-22XXXX01,InstanceProfile=EMR_EC2_DefaultRole \
	--instance-fleets InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=c4.xlarge}'] \
	  InstanceFleetType=CORE,TargetOnDemandCapacity=100,InstanceTypeConfigs=['{InstanceType=c5.xlarge},{InstanceType=m5.xlarge},{InstanceType=r5.xlarge}'],\
	  LaunchSpecifications={OnDemandSpecification='{AllocationStrategy=lowest-price,CapacityReservationOptions={CapacityReservationPreference=open}}'}
```

其中：
+ 將 `open-ODCR-cluster` 取代為使用開放容量保留的叢集名稱。
+ 將 `subnet-22XXXX01` 取代為子網路 ID。

## 先使用開放容量保留
<a name="on-demand-capacity-reservations-first"></a>

在佈建 Amazon EMR 叢集時，您可以選擇覆寫價格最低的配置策略，並先使用可用的開放容量保留排定優先順序。在這種情況下，Amazon EMR 會評估具有啟動請求中指定的容量保留的所有執行個體集區，並使用價格最低且容量足以啟動所有請求的核心節點的執行個體集區。如果具有容量保留的任何執行個體集區都沒有足夠的容量供請求的核心節點使用，則 Amazon EMR 會回退至上一主題中所述的最佳情況。也就是說，Amazon EMR 會重新評估在啟動請求中指定的所有執行個體集區，並使用價格最低且容量足以啟動所有請求的核心節點的執行個體集區。系統會自動套用與執行個體集區相符的可用開放容量保留。如果可用的開放容量保留與執行個體集區不符，則保持未使用狀態。

佈建核心節點後，即會選取並修正可用區域。Amazon EMR 在所選可用區域中將任務節點佈建到具有容量保留的執行個體集區中，從價格最低的節點開始，直到佈建所有任務節點為止。Amazon EMR 會先使用所選可用區域中每個執行個體集區中可用的開放容量保留，而且只有在必要時，才會使用價格最低的策略來佈建任何剩餘的任務節點。

以下是 Amazon EMR 容量配置邏輯的使用案例，可先使用開放容量保留。

**範例 1：**啟動請求中具有可用開放容量保留的執行個體集區具有足夠的容量供核心節點使用****

在這種情況下，無論執行個體集區價格為何，Amazon EMR 都會在具有可用開放容量保留的執行個體集區中啟動容量。因此，會盡可能使用您的開放容量保留，直到佈建所有核心節點為止。


|  |  | 
| --- |--- |
| On-Demand Strategy | lowest-price | 
| Requested Capacity | 100 | 
| Usage Strategy | use-capacity-reservations-first | 
| Instance Type | c5.xlarge | m5.xlarge | r5.xlarge | 
| Available Open capacity reservations | - | - | 150 | 
| On-Demand Price | \$1 | \$1\$1 | \$1\$1\$1 | 
| 佈建的執行個體 | - | - | 100 | 
| --- |--- |--- |--- |
| 使用的開放容量保留 | - | - | 100 | 
| --- |--- |--- |--- |
| 可用的開放容量保留 | - | - | 50 | 
| --- |--- |--- |--- |

**範例 2：**啟動請求中具有可用開放容量保留的執行個體集區沒有足夠的容量供核心節點使用****

在這種情況下，Amazon EMR 會回退至使用價格最低的策略啟動核心節點，並盡量使用容量保留。


|  |  | 
| --- |--- |
| On-Demand Strategy | lowest-price | 
| Requested Capacity | 100 | 
| Usage Strategy | use-capacity-reservations-first | 
| Instance Type | c5.xlarge | m5.xlarge | r5.xlarge | 
| Available Open capacity reservations | 10 | 50 | 50 | 
| On-Demand Price | \$1 | \$1\$1 | \$1\$1\$1 | 
| 佈建的執行個體 | 100 | - | - | 
| --- |--- |--- |--- |
| 使用的開放容量保留 | 10 | - | - | 
| --- |--- |--- |--- |
| 可用的開放容量保留 | - | 50 | 50 | 
| --- |--- |--- |--- |

啟動執行個體機群後，您可以執行 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html) 以查看未使用的容量保留的剩餘數量。

**設定執行個體機群以先使用開放容量保留**

當您使用 `RunJobFlow` 動作建立執行個體機群型叢集時，將隨需配置策略設定為 `lowest-price`，將 `CapacityReservationOptions` 的 `UsageStrategy` 設定為 `use-capacity-reservations-first`。

```
"LaunchSpecifications": 
    {"OnDemandSpecification": {
        "AllocationStrategy": "lowest-price",
        "CapacityReservationOptions":
         {
            "UsageStrategy": "use-capacity-reservations-first"
         }
       }
    }
```

您也可以使用 Amazon EMR CLI 先建立使用容量保留的執行個體機群型叢集。

```
aws emr create-cluster \
  --name 'use-CR-first-cluster' \
  --release-label emr-5.30.0 \
  --service-role EMR_DefaultRole \
  --ec2-attributes SubnetId=subnet-22XXXX01,InstanceProfile=EMR_EC2_DefaultRole \
  --instance-fleets \
    InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=c4.xlarge}'] \
    InstanceFleetType=CORE,TargetOnDemandCapacity=100,InstanceTypeConfigs=['{InstanceType=c5.xlarge},{InstanceType=m5.xlarge},{InstanceType=r5.xlarge}'],\
LaunchSpecifications={OnDemandSpecification='{AllocationStrategy=lowest-price,CapacityReservationOptions={UsageStrategy=use-capacity-reservations-first}}'}
```

其中：
+ 將 `use-CR-first-cluster` 取代為使用開放容量保留的叢集名稱。
+ 將 `subnet-22XXXX01` 取代為子網路 ID。

## 先使用目標容量保留
<a name="on-demand-capacity-reservations-targeted"></a>

在佈建 Amazon EMR 叢集時，您可以選擇覆寫價格最低的配置策略，並先使用可用的目標容量保留排定優先順序。在這種情況下，Amazon EMR 會評估具有啟動請求中指定的目標容量保留的所有執行個體集區，並選擇價格最低且容量足以啟動所有請求的核心節點的執行個體集區。如果具有目標容量保留的任何執行個體集區都沒有足夠的容量供核心節點使用，Amazon EMR 會回退至先前所述的最佳情況。也就是說，Amazon EMR 會重新評估在啟動請求中指定的所有執行個體集區，並選取價格最低且容量足以啟動所有請求的核心節點的執行個體集區。系統會自動套用與執行個體集區相符的可用開放容量保留。但是，目標容量保留保持未使用狀態。

佈建核心節點後，即會選取並修正可用區域。Amazon EMR 在所選可用區域中將任務節點佈建到具有目標容量保留的執行個體集區中，從價格最低的節點開始，直到佈建所有任務節點為止。Amazon EMR 會先嘗試使用選取的可用區域中每個執行個體集區中可用的目標容量保留。然後，只有在需要時，Amazon EMR 才會使用價格最低的策略來佈建任何剩餘的任務節點。

以下是 Amazon EMR 容量配置邏輯的使用案例，可先使用目標容量保留。

**範例 1：啟動請求中具有可用目標容量保留的執行個體集區具有足夠的容量供核心節點使用**

在這種情況下，無論執行個體集區價格為何，Amazon EMR 都會在具有可用目標容量保留的執行個體集區中啟動容量。因此，會盡可能使用您的目標容量保留，直到佈建所有核心節點為止。


|  |  | 
| --- |--- |
| On-Demand Strategy | lowest-price | 
| Usage Strategy | use-capacity-reservations-first | 
| Requested Capacity | 100 | 
| Instance Type | c5.xlarge | m5.xlarge | r5.xlarge | 
| Available targeted capacity reservations | - | - | 150 | 
| On-Demand Price | \$1 | \$1\$1 | \$1\$1\$1 | 
| 佈建的執行個體 | - | - | 100 | 
| --- |--- |--- |--- |
| 使用的目標容量保留 | - | - | 100 | 
| --- |--- |--- |--- |
| 可用的目標容量保留 | - | - | 50 | 
| --- |--- |--- |--- |

**Example 範例 2：啟動請求中具有可用目標容量保留的執行個體集區沒有足夠的容量供核心節點使用**  


|  |  | 
| --- |--- |
| On-Demand Strategy | lowest-price | 
| Requested Capacity | 100 | 
| Usage Strategy | use-capacity-reservations-first | 
| Instance Type | c5.xlarge | m5.xlarge | r5.xlarge | 
| Available targeted capacity reservations | 10 | 50 | 50 | 
| On-Demand Price | \$1 | \$1\$1 | \$1\$1\$1 | 
| 佈建的執行個體 | 100 | - | - | 
| --- |--- |--- |--- |
| 使用的目標容量保留 | 10 | - | - | 
| --- |--- |--- |--- |
| 可用的目標容量保留 | - | 50 | 50 | 
| --- |--- |--- |--- |

啟動執行個體機群後，您可以執行 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html) 以查看未使用的容量保留的剩餘數量。

**設定執行個體機群以先使用目標容量保留**

當您使用 `RunJobFlow` 動作建立執行個體機群型叢集時，將隨需配置策略設定為 `lowest-price`，將 `CapacityReservationOptions` 的 `UsageStrategy` 設定為 `use-capacity-reservations-first`，將 `CapacityReservationOptions` 的 `CapacityReservationResourceGroupArn` 設定為 `<your resource group ARN>`。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[使用容量保留](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-reservations-using.html)。

```
"LaunchSpecifications": 
    {"OnDemandSpecification": {
        "AllocationStrategy": "lowest-price",
        "CapacityReservationOptions":
         {
            "UsageStrategy": "use-capacity-reservations-first",
            "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:sa-east-1:123456789012:group/MyCRGroup"
         }
       }
    }
```

其中，將 `arn:aws:resource-groups:sa-east-1:123456789012:group/MyCRGroup` 取代為您的資源群組 ARN。

您也可以使用 Amazon EMR CLI 建立使用目標容量保留的執行個體機群型叢集。

```
aws emr create-cluster \
  --name 'targeted-CR-cluster' \
  --release-label emr-5.30.0 \
  --service-role EMR_DefaultRole \
  --ec2-attributes SubnetId=subnet-22XXXX01,InstanceProfile=EMR_EC2_DefaultRole \
  --instance-fleets InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=c4.xlarge}'] \
    InstanceFleetType=CORE,TargetOnDemandCapacity=100,\
InstanceTypeConfigs=['{InstanceType=c5.xlarge},{InstanceType=m5.xlarge},{InstanceType=r5.xlarge}'],\
LaunchSpecifications={OnDemandSpecification='{AllocationStrategy=lowest-price,CapacityReservationOptions={UsageStrategy=use-capacity-reservations-first,CapacityReservationResourceGroupArn=arn:aws:resource-groups:sa-east-1:123456789012:group/MyCRGroup}}'}
```

其中：
+ 將 `targeted-CR-cluster` 取代為使用目標容量保留的叢集名稱。
+ 將 `subnet-22XXXX01` 取代為子網路 ID。
+ 將 `arn:aws:resource-groups:sa-east-1:123456789012:group/MyCRGroup` 取代為您的資源群組 ARN。

## 避免使用可用的開放容量保留
<a name="on-demand-capacity-reservations-avoiding"></a>

**Example**  
如果您想要避免在啟動 Amazon EMR 叢集時意外地使用任何開放容量保留，請將隨需配置策略設定為 `lowest-price`，將 `CapacityReservationOptions` 的 `CapacityReservationPreference` 設定為 `none`。否則，Amazon EMR 會將隨需執行個體的容量保留偏好設定預設為 `open`，並盡量使用可用的開放容量保留。  

```
"LaunchSpecifications": 
    {"OnDemandSpecification": {
        "AllocationStrategy": "lowest-price",
        "CapacityReservationOptions":
         {
            "CapacityReservationPreference": "none"
         }
       }
    }
```
您也可以使用 Amazon EMR CLI 建立不使用任何開放容量保留的執行個體機群型叢集。  

```
aws emr create-cluster \
  --name 'none-CR-cluster' \
  --release-label emr-5.30.0 \
  --service-role EMR_DefaultRole \
  --ec2-attributes SubnetId=subnet-22XXXX01,InstanceProfile=EMR_EC2_DefaultRole \
  --instance-fleets \
    InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=c4.xlarge}'] \
    InstanceFleetType=CORE,TargetOnDemandCapacity=100,InstanceTypeConfigs=['{InstanceType=c5.xlarge},{InstanceType=m5.xlarge},{InstanceType=r5.xlarge}'],\
LaunchSpecifications={OnDemandSpecification='{AllocationStrategy=lowest-price,CapacityReservationOptions={CapacityReservationPreference=none}}'}
```
其中：  
+ 將 `none-CR-cluster` 取代為未使用任何開放容量保留的叢集名稱。
+ 將 `subnet-22XXXX01` 取代為子網路 ID。

## 使用容量保留的案例
<a name="on-demand-capacity-reservations-scenarios"></a>

在下列案例中，您可以從使用容量保留中受益。

**案例 1：使用容量保留輪換長時間執行的叢集**  
在輪換長時間執行的叢集時，您可能對佈建的新執行個體的執行個體類型和可用區域有嚴格的要求。透過容量保留，您可以使用容量保證在不中斷的情況下完成叢集輪換。

![\[使用可用容量保留的叢集輪換\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/images/odcr-longrunning-cluster-diagram.png)


**案例 2：使用容量保留佈建連續的短期叢集**  
您還可以使用容量保留為個別工作負載佈建一組連續的短期叢集，以便在終止叢集時，下一個叢集可以使用容量保留。您可以使用目標容量保留，以確保只有預定的叢集使用容量保留。

![\[使用可用容量保留的短期叢集佈建\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/images/odcr-short-cluster-diagram.png)
