

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

# 在 EMR Serverless 中使用應用程式的預先初始化容量
<a name="pre-init-capacity"></a>

EMR Serverless 提供選用功能，可讓驅動程式和工作者在幾秒鐘內預先初始化並準備好回應。這可有效地為應用程式建立工作者的暖集區。此功能稱為*預先初始化容量*。若要設定此功能，請將應用程式的 `initialCapacity` 參數設定為您要預先初始化的工作者數量。透過預先初始化的工作者容量，任務會立即開始。當您想要實作迭代應用程式和時間敏感的任務時，這是理想的選擇。

預先初始化容量可讓工作者的暖集區準備好在幾秒鐘內啟動任務和工作階段。即使應用程式處於閒置狀態，您仍需支付佈建的預先初始化工作者費用，因此我們建議針對受益於快速啟動時間的使用案例啟用它，並調整其大小以獲得最佳資源使用率。EMR Serverless 應用程式會在閒置時自動關閉。建議您在使用預先初始化的工作者時，將此功能維持在開啟狀態，以避免意外費用。

當您提交任務時，如果來自 的工作者`initialCapacity`可用，任務會使用這些資源來開始執行。如果這些工作者已經由其他任務使用，或者如果任務需要比 更多的資源`initialCapacity`，則應用程式會請求並取得額外的工作者，直到應用程式設定的資源上限為止。當任務完成執行時，它會釋出其使用的工作者，且應用程式可用的資源數目會傳回 `initialCapacity`。即使任務完成執行，應用程式仍會維護 資源`initialCapacity`的 。應用程式會在任務不再需要執行`initialCapacity`時，釋出多餘的資源。

應用程式啟動時，預先初始化的容量可供使用。應用程式停止時，預先初始化的容量會變成非作用中。只有當已建立請求的預先初始化容量並準備好可供使用時，應用程式才會移至 `STARTED` 狀態。在應用程式處於 `STARTED` 狀態的整段時間內，EMR Serverless 會保留預先初始化的容量，以供任務或互動式工作負載使用。此功能會還原已發行或失敗容器的容量。這會維護 `InitialCapacity` 參數指定的工作者數量。沒有預先初始化容量的應用程式狀態可以立即從 變更為 `CREATED` `STARTED`。

 如果應用程式在一段時間內未使用，則您可以將應用程式設定為釋放預先初始化的容量，預設值為 15 分鐘。當您提交新任務時，停止的應用程式會自動啟動。您可以在建立應用程式時設定這些自動啟動和停止組態，或在應用程式處於 `CREATED`或 `STOPPED` 狀態時變更組態。

您可以變更`InitialCapacity`計數，並為每個工作者指定運算組態，例如 CPU、記憶體和磁碟。由於您無法進行部分修改，因此請在變更值時指定所有運算組態。您只能在應用程式處於 `CREATED`或 `STOPPED` 狀態時變更組態。

**注意**  
為了最佳化應用程式對 資源的使用，建議您將容器大小與預先初始化的容量工作者大小保持一致。例如，如果您將 Spark 執行器大小設定為 2 CPUs，並將記憶體設定為 8 GB，但您的預先初始化容量工作者大小為 4 個具有 16 GB 記憶體的 CPUs，則 Spark 執行器只會在指派給此任務時使用一半的工作者資源。

## 自訂 Spark 和 Hive 的預先初始化容量
<a name="customizing-capacity"></a>

您可以針對在特定大數據架構上執行的工作負載，進一步自訂預先初始化的容量。例如，當工作負載在 Apache Spark 上執行時，請指定有多少工作者開始做為驅動程式，以及有多少工作者開始做為執行器。同樣地，當您使用 Apache Hive 時，請指定有多少工作者開始做為 Hive 驅動程式，以及應執行多少 Tez 任務。

**使用預先初始化的容量設定執行 Apache Hive 的應用程式**

下列 API 請求會根據 Amazon EMR 發行版本 emr-6.6.0 建立執行 Apache Hive 的應用程式。應用程式從 5 個預先初始化的 Hive 驅動程式開始，每個驅動程式具有 2 個 vCPU 和 4 GB 記憶體，以及 50 個 預先初始化的 Tez 任務工作者，每個驅動程式具有 4 個 vCPU 和 8 GB 記憶體。當 Hive 查詢在此應用程式上執行時，它們會先使用預先初始化的工作者，並立即開始執行。如果所有預先初始化的工作者都忙碌中，並提交了更多 Hive 任務，則應用程式可以擴展到總共 400 個 vCPU 和 1024 GB 的記憶體。您可以選擇性地省略 `DRIVER`或`TEZ_TASK`工作者的容量。

```
aws emr-serverless create-application \
  --type "HIVE" \
  --name {{my-application-name}} \
  --release-label emr-6.6.0 \
  --initial-capacity '{
    "DRIVER": {
        "workerCount": 5,
        "workerConfiguration": {
            "cpu": "2vCPU",
            "memory": "4GB"
        }
    },
    "TEZ_TASK": {
        "workerCount": 50,
        "workerConfiguration": {
            "cpu": "4vCPU",
            "memory": "8GB"
        }
    }
  }' \
  --maximum-capacity '{
    "cpu": "400vCPU",
    "memory": "1024GB"
  }'
```

**使用預先初始化的容量設定執行 Apache Spark 的應用程式 **

下列 API 請求會根據 Amazon EMR 6.6.0 版建立執行 Apache Spark 3.2.0 的應用程式。應用程式從 5 個預先初始化的 Spark 驅動程式開始，每個驅動程式都有 2 個 vCPU 和 4 GB 的記憶體，以及 50 個 預先初始化的執行器，每個驅動程式都有 4 個 vCPU 和 8 GB 的記憶體。當 Spark 任務在此應用程式上執行時，它們會先使用預先初始化的工作者，並立即開始執行。如果所有預先初始化的工作者都忙碌中，並提交了更多 Spark 任務，則應用程式可以擴展到總共 400 個 vCPU 和 1024 GB 的記憶體。您可以選擇性地省略 `DRIVER`或 的容量`EXECUTOR`。

**注意**  
Spark 會將具有 10% 預設值的可設定記憶體額外負荷新增至驅動程式和執行器請求的記憶體。若要讓任務使用預先初始化的工作者，初始容量記憶體組態應大於任務和額外負荷請求的記憶體。

```
aws emr-serverless create-application \
  --type "SPARK" \
  --name {{my-application-name}} \
  --release-label emr-6.6.0 \
  --initial-capacity '{
    "DRIVER": {
        "workerCount": 5,
        "workerConfiguration": {
            "cpu": "2vCPU",
            "memory": "4GB"
        }
    },
    "EXECUTOR": {
        "workerCount": 50,
        "workerConfiguration": {
            "cpu": "4vCPU",
            "memory": "8GB"
        }
    }
  }' \
  --maximum-capacity '{
    "cpu": "400vCPU",
    "memory": "1024GB"
  }'
```