EMR Serverless でアプリケーションを操作するための事前初期化された容量
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 の事前初期化済み容量のカスタマイズ
特定のビッグデータフレームワークで実行されるワークロード用に、事前に初期化された容量をさらにカスタマイズできます。例えば、ワークロードが 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" }'