

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

# EMR Serverless を使用する際のアプリケーションの設定
<a name="application-capacity"></a>

EMR Serverless では、使用するアプリケーションを設定します。例えば、アプリケーションがスケールアップできる最大容量を設定し、ドライバーとワーカーが応答できるように事前初期化された容量を設定して、アプリケーションレベルでランタイムとモニタリング設定の一般的なセットを指定します。次のページでは、EMR Serverless を使用する際にアプリケーションを設定する方法について説明します。

**Topics**
+ [EMR Serverless でのアプリケーションの動作について](app-behavior.md)
+ [EMR Serverless でアプリケーションを操作するための事前初期化された容量](pre-init-capacity.md)
+ [EMR Serverless のデフォルトのアプリケーション設定](default-configs.md)

# EMR Serverless でのアプリケーションの動作について
<a name="app-behavior"></a>

このセクションでは、ジョブを送信する際の動作、スケーリングの容量設定、EMR Serverless のワーカー設定について説明します。

## アプリケーションのデフォルトの動作
<a name="auto-start-stop"></a>

**自動起動** — デフォルトでは、アプリケーションはジョブの送信時に自動起動するように設定されています。この機能はオフにできます。

**自動停止** — アプリケーションは、デフォルトで 15 分間アイドル状態になると自動停止するように設定されています。アプリケーションが `STOPPED` 状態に変わると、設定された事前初期化済みの容量が解放されます。アプリケーションが自動停止するまでのアイドル時間を変更できます。または、この機能をオフにすることもできます。

## 最大容量
<a name="max-capacity"></a>

アプリケーションがスケールアップ可能な最大容量を設定できます。CPU、メモリ (GB)、ディスク (GB) について最大容量を指定できます。

**注記**  
ワーカー数にそれらのサイズを乗じることで、サポートされるワーカーサイズに比例するように最大容量を設定することがベストプラクティスです。例えば、アプリケーションを 2 vCPU、16 GB メモリ、20 GB のディスクを備えた 50 個のワーカーに制限する必要がある場合は、最大容量を 100 vCPU、800 GB メモリ、1,000 GB のディスクに設定します。

## サポートされているワーカーの設定
<a name="worker-configs"></a>

次の表は、EMR Serverless に指定できるサポート対象のワーカーの設定とサイズを一覧示しています。ワークロードの必要性に応じて、ドライバーとエグゼキュターにさまざまなサイズを設定します。


**ワーカーの設定とサイズ**  

| CPU | メモリ | デフォルトのエフェメラルストレージ | 
| --- | --- | --- | 
|  1 vCPU  |  最小 2 GB、最大 8 GB、1 GB 単位  |  20 GB～200 GB  | 
|  2 vCPU  |  最小 4 GB、最大 16 GB、1 GB 単位  |  20 GB～200 GB  | 
|  4 vCPU  |  最小 8 GB、最大 30 GB、1 GB 単位  |  20 GB～200 GB  | 
|  8 vCPU  |  最小 16 GB、最大 60 GB、4 GB 単位  |  20 GB～200 GB  | 
|  16 vCPU  |  最小 32 GB、最大 120 GB、8 GB 単位  |  20 GB～200 GB  | 

**CPU** — 各ワーカーには、1、2、4、8、または 16 個の vCPU を配置できます。

**メモリ** — 各ワーカーには、前の表に記載されている制限内で GB 単位で指定されたメモリが搭載されています。Spark ジョブにはメモリオーバーヘッドがあります。つまり、使用するメモリが指定されたコンテナサイズを超えています。このオーバーヘッドは、プロパティ `spark.driver.memoryOverhead` と `spark.executor.memoryOverhead` で指定されます。オーバーヘッドのデフォルト値はコンテナメモリの 10% であり、最小値は 384 MB です。ワーカーサイズを選択する際は、このオーバーヘッドを考慮する必要があります。

例えば、ワーカーインスタンスに 4 個の vCPU を選択し、事前に初期化されたストレージ容量が 30 GB である場合は、Spark ジョブのエグゼキュターメモリとして約 27 GB の値を設定します。これにより、事前初期化された容量を最大限に活用できます。使用可能なメモリは 27 GB で、合計はこれに 27 GB の 10% (2.7 GB) を加えた 29.7 GB です。

**ディスク** — 各ワーカーには、最小サイズが 20 GB、最大サイズが 200 GB の一時ストレージディスクを設定できます。ワーカーごとに設定する 20 GB を超える追加ストレージに対してのみ料金が発生します。

# 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"
  }'
```

# EMR Serverless のデフォルトのアプリケーション設定
<a name="default-configs"></a>

同じアプリケーションで送信するすべてのジョブに対して、アプリケーションレベルでランタイム設定とモニタリング設定の一般的なセットを指定できます。これにより、ジョブごとに同じ設定を送信する必要性に関連する追加のオーバーヘッドが軽減されます。

設定は、次の時点で変更できます。
+ [ジョブの送信時にアプリケーションレベルの設定を宣言します。](#default-configs-declare)
+ [ジョブの実行中にデフォルト設定をオーバーライドします。](#default-configs-override)

次の各セクションでは、その他の構文の詳細と例を示します。

## アプリケーションレベルでの設定の宣言
<a name="default-configs-declare"></a>

アプリケーションで送信するジョブのアプリケーションレベルのログ記録とランタイムの設定プロパティを指定できます。

**`monitoringConfiguration`**  
アプリケーションで送信するジョブのログ設定を指定するには、[[`monitoringConfiguration`]](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_MonitoringConfiguration.html) フィールドを使用します。EMR Serverless のログ記録について詳しくは、「[ログの保存](logging.md)」を参照してください。

**`runtimeConfiguration`**  
`spark-defaults` などのランタイム設定プロパティを指定するには、[`runtimeConfiguration`] フィールドに設定オブジェクトを指定します。これは、アプリケーションで送信するすべてのジョブのデフォルト設定に影響します。詳細については、[Hive 設定オーバーライドパラメータ](jobs-hive.md#hive-defaults-configurationOverrides) および [Spark 設定オーバーライドパラメータ](jobs-spark.md#spark-defaults-configurationOverrides) を参照してください。  
特定の EMR Serverless リリースによって使用可能な設定分類は異なります。例えば、カスタム Log4j `spark-driver-log4j2` と `spark-executor-log4j2` の分類は、リリース 6.8.0 以降でのみ使用できます。アプリケーション固有のプロパティのリストについては、「[Spark ジョブのプロパティ](jobs-spark.md#spark-defaults)」および「[Hive ジョブプロパティ](jobs-hive.md#hive-defaults)」を参照してください。  
アプリケーションレベルで [Apache Log4j2 プロパティ](log4j2.md)、[データ保護のためのAWS Secrets Manager](secrets-manager.md) および [Java 17 ランタイム](using-java-runtime.md)を設定することもできます。  
アプリケーションレベルで Secrets Manager シークレットを渡すには、シークレットを使用して EMR Serverless アプリケーションを作成または更新する必要があるユーザーとロールに次のポリシーをアタッチします。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "SecretsManagerPolicy",
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue",
        "secretsmanager:DescribeSecret"
      ],
      "Resource": [
        "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret-name-123abc"
      ]
    },
    {
      "Sid": "KMSDecryptPolicy",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt"
      ],
      "Resource": [
        "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012"
      ]
    }
  ]
}
```
シークレットのカスタムポリシー作成の詳細については、「*AWS Secrets Manager ユーザーガイド*」の「[AWS Secrets Managerのアクセス許可ポリシーの例](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples.html)」を参照してください。

**注記**  
アプリケーションレベルで指定した `runtimeConfiguration` は、[https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html) API の `applicationConfiguration` にマッピングされます。

### 宣言の例
<a name="default-configs-declare-example"></a>

次の例は、`create-application` を使用してデフォルト設定を宣言する方法を示しています。

```
aws emr-serverless create-application \
    --release-label release-version  \
    --type SPARK \
    --name my-application-name \
    --runtime-configuration '[
        {
            "classification": "spark-defaults",
            "properties": {
                "spark.driver.cores": "4",
                "spark.executor.cores": "2",
                "spark.driver.memory": "8G",
                "spark.executor.memory": "8G",
                "spark.executor.instances": "2",
                "spark.hadoop.javax.jdo.option.ConnectionDriverName":"org.mariadb.jdbc.Driver",
                "spark.hadoop.javax.jdo.option.ConnectionURL":"jdbc:mysql://db-host:db-port/db-name",
                "spark.hadoop.javax.jdo.option.ConnectionUserName":"connection-user-name",
                "spark.hadoop.javax.jdo.option.ConnectionPassword": "EMR.secret@SecretID"
            }
        },
        {
            "classification": "spark-driver-log4j2",
            "properties": {
                "rootLogger.level":"error", 
                "logger.IdentifierForClass.name": "classpathForSettingLogger",
                "logger.IdentifierForClass.level": "info"
            }
        }
    ]' \
    --monitoring-configuration '{
        "s3MonitoringConfiguration": {
            "logUri": "s3://amzn-s3-demo-logging-bucket/logs/app-level"
        },
        "managedPersistenceMonitoringConfiguration": {
            "enabled": false
        }
    }'
```

## ジョブ実行中の設定のオーバーライド
<a name="default-configs-override"></a>

[https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html) API を使用して、アプリケーション設定とモニタリング設定の設定オーバーライドを指定できます。次に、EMR Serverless はアプリケーションレベルとジョブレベルで指定された設定をマージして、ジョブ実行の設定を決定します。

マージが発生する際の粒度レベルは次のとおりです。
+ **[https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-applicationConfiguration](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-applicationConfiguration)** - 分類タイプ (例: `spark-defaults`)。
+ **[https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-monitoringConfiguration](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-monitoringConfiguration)** - 設定タイプ (例: `s3MonitoringConfiguration`)。

**注記**  
[https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html) で指定した設定の優先度は、アプリケーションレベルで指定した設定よりも優先されます。

優先順位ランキングの詳細については、「[Hive 設定オーバーライドパラメータ](jobs-hive.md#hive-defaults-configurationOverrides)」および「[Spark 設定オーバーライドパラメータ](jobs-spark.md#spark-defaults-configurationOverrides)」を参照してください。

ジョブを開始するときに、特定の設定を指定しない場合、設定はアプリケーションから継承されます。ジョブレベルで設定を宣言する場合は、次の操作を実行できます。
+ **既存の設定をオーバーライドする** - オーバーライド値を使用して、`StartJobRun` リクエストに同じ設定パラメータを指定します。
+ **設定を追加する** - `StartJobRun` リクエストに、指定する値を含む新しい設定パラメータを追加します。
+ **既存の設定を削除する** - アプリケーションの*ランタイム設定*を削除するには、削除する設定のキーを指定し、設定の空の宣言 `{}` を渡します。ジョブの実行に必要なパラメータを含む分類を削除することはお勧めしません。例えば、[Hive ジョブに必要なプロパティ](https://docs.aws.amazon.com/)を削除しようとすると、ジョブは失敗します。

  アプリケーションの*モニタリング設定*を削除するには、関連する設定タイプに適した方法を使用します。
  + **`cloudWatchLoggingConfiguration`** - `cloudWatchLogging` を削除するには、有効なフラグを `false` として渡します。
  + **`managedPersistenceMonitoringConfiguration`** - マネージド永続化設定を削除してデフォルトの有効状態にフォールバックするには、設定の空の宣言 `{}` を渡します。
  + **`s3MonitoringConfiguration`** - `s3MonitoringConfiguration` を削除するには、設定の空の宣言 `{}` を渡します。

### オーバーライドの例
<a name="default-configs-override-example"></a>

次の例は、`start-job-run` でのジョブ送信中に実行できるさまざまなオペレーションを示しています。

```
aws emr-serverless start-job-run \
    --application-id your-application-id \
    --execution-role-arn your-job-role-arn \
    --job-driver '{
        "sparkSubmit": {
            "entryPoint": "s3://us-east-1.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py", 
            "entryPointArguments": ["s3://amzn-s3-demo-destination-bucket1/wordcount_output"]
        }
    }' \
    --configuration-overrides '{
        "applicationConfiguration": [ 
            {
                // Override existing configuration for spark-defaults in the application
                "classification": "spark-defaults", 
                "properties": {
                    "spark.driver.cores": "2",
                    "spark.executor.cores": "1",
                    "spark.driver.memory": "4G",
                    "spark.executor.memory": "4G"
                }
            },
            {
                // Add configuration for spark-executor-log4j2
                "classification": "spark-executor-log4j2",
                "properties": {
                    "rootLogger.level": "error", 
                    "logger.IdentifierForClass.name": "classpathForSettingLogger",
                    "logger.IdentifierForClass.level": "info"
                }
            },
            {
                // Remove existing configuration for spark-driver-log4j2 from the application
                "classification": "spark-driver-log4j2",
                "properties": {}
            }
        ],
        "monitoringConfiguration": {
            "managedPersistenceMonitoringConfiguration": {
                // Override existing configuration for managed persistence
                "enabled": true
            },
            "s3MonitoringConfiguration": {
                // Remove configuration of S3 monitoring
            },
            "cloudWatchLoggingConfiguration": {
                // Add configuration for CloudWatch logging
                "enabled": true
            }
        }
    }'
```

ジョブの実行時に、「[Hive 設定オーバーライドパラメータ](jobs-hive.md#hive-defaults-configurationOverrides)」および「[Spark 設定オーバーライドパラメータ](jobs-spark.md#spark-defaults-configurationOverrides)」で説明されている優先度のオーバーライドのランキングに基づいて、次の分類と設定が適用されます。
+ 分類 `spark-defaults` は、ジョブレベルで指定したプロパティで更新されます。この分類では、`StartJobRun` に含まれるプロパティのみが考慮されます。
+ 分類 `spark-executor-log4j2` は、既存の分類リストに追加されます。
+ 分類 `spark-driver-log4j2` は削除されます。
+ `managedPersistenceMonitoringConfiguration` の設定は、ジョブレベルの設定で更新されます。
+ `s3MonitoringConfiguration` の設定は削除されます。
+ `cloudWatchLoggingConfiguration` の設定は、既存のモニタリング設定に追加されます。