

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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 CPU に設定し、メモリを 8 GB に設定したものの、事前初期化済みのキャパシティワーカーのサイズが 4 CPU でメモリが 16 GB の場合、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 を実行するアプリケーションを作成します。アプリケーションは、それぞれ 2 個の vCPU と 4 GB のメモリを搭載した 5 つの事前初期化済み Hive ドライバー、およびそれぞれ 4 個の vCPU と 8 GB のメモリを搭載した 50 個の事前初期化済み Tez タスクワーカーで起動します。Hive クエリがこのアプリケーションで実行されると、まず事前初期化されたワーカーを使用し、直ちに実行を開始します。事前初期化済みのワーカーがすべてビジー状態であり、より多くの Hive ジョブが送信された場合、アプリケーションは合計 400 vCPU と 1,024 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 を実行するアプリケーションを作成します。アプリケーションは、それぞれ 2 個の vCPU と 4 GB のメモリを搭載した 5 つの事前初期化された Spark ドライバー、およびそれぞれ 4 vCPU と 8 GB のメモリを搭載した 50 個の事前初期化されたエグゼキュターで起動します。このアプリケーションで Spark ジョブを実行すると、まず事前初期化されたワーカーが使用され、直ちに実行を開始します。事前初期化済みのワーカーがすべてビジー状態であり、より多くの Spark ジョブが送信された場合、アプリケーションは合計 400 vCPU と 1,024 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"
  }'
```