EMR Serverless のデフォルトのアプリケーション設定 - Amazon EMR

EMR Serverless のデフォルトのアプリケーション設定

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

設定は、次の時点で変更できます。

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

アプリケーションレベルでの設定の宣言

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

monitoringConfiguration

アプリケーションで送信するジョブのログ設定を指定するには、[monitoringConfiguration] フィールドを使用します。EMR Serverless のログ記録について詳しくは、「ログの保存」を参照してください。

runtimeConfiguration

spark-defaults などのランタイム設定プロパティを指定するには、[runtimeConfiguration] フィールドに設定オブジェクトを指定します。これは、アプリケーションで送信するすべてのジョブのデフォルト設定に影響します。詳細については、Hive 設定オーバーライドパラメータおよびSpark 設定オーバーライドパラメータを参照してください。

特定の EMR Serverless リリースによって使用可能な設定分類は異なります。例えば、カスタム Log4j spark-driver-log4j2spark-executor-log4j2 の分類は、リリース 6.8.0 以降でのみ使用できます。アプリケーション固有のプロパティのリストについては、「Spark ジョブのプロパティ」および「Hive ジョブプロパティ」を参照してください。

アプリケーションレベルで Apache Log4j2 プロパティデータ保護のための AWS Secrets Manager および Java 17 ランタイムを設定することもできます。

アプリケーションレベルで Secrets Manager シークレットを渡すには、シークレットを使用して EMR Serverless アプリケーションを作成または更新する必要があるユーザーとロールに次のポリシーをアタッチします。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "SecretsManagerPolicy", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "kms:Decrypt" ], "Resource": "arn:aws:secretsmanager:your-secret-arn" } ] }

シークレットのカスタムポリシー作成の詳細については、「AWS Secrets Manager ユーザーガイド」の「AWS Secrets Manager のアクセス許可ポリシーの例」を参照してください。

注記

アプリケーションレベルで指定した runtimeConfiguration は、StartJobRun API の applicationConfiguration にマッピングされます。

宣言の例

次の例は、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 } }'

ジョブ実行中の設定のオーバーライド

StartJobRun API を使用して、アプリケーション設定とモニタリング設定の設定オーバーライドを指定できます。次に、EMR Serverless はアプリケーションレベルとジョブレベルで指定された設定をマージして、ジョブ実行の設定を決定します。

マージが発生する際の粒度レベルは次のとおりです。

注記

StartJobRun で指定した設定の優先度は、アプリケーションレベルで指定した設定よりも優先されます。

優先順位ランキングの詳細については、「Hive 設定オーバーライドパラメータ」および「Spark 設定オーバーライドパラメータ」を参照してください。

ジョブを開始するときに、特定の設定を指定しない場合、設定はアプリケーションから継承されます。ジョブレベルで設定を宣言する場合は、次の操作を実行できます。

  • 既存の設定をオーバーライドする - オーバーライド値を使用して、StartJobRun リクエストに同じ設定パラメータを指定します。

  • 設定を追加する - StartJobRun リクエストに、指定する値を含む新しい設定パラメータを追加します。

  • 既存の設定を削除する - アプリケーションのランタイム設定を削除するには、削除する設定のキーを指定し、設定の空の宣言 {} を渡します。ジョブの実行に必要なパラメータを含む分類を削除することはお勧めしません。例えば、Hive ジョブに必要なプロパティを削除しようとすると、ジョブは失敗します。

    アプリケーションのモニタリング設定を削除するには、関連する設定タイプに適した方法を使用します。

    • cloudWatchLoggingConfiguration - cloudWatchLogging を削除するには、有効なフラグを false として渡します。

    • managedPersistenceMonitoringConfiguration - マネージド永続化設定を削除してデフォルトの有効状態にフォールバックするには、設定の空の宣言 {} を渡します。

    • s3MonitoringConfiguration - s3MonitoringConfiguration を削除するには、設定の空の宣言 {} を渡します。

オーバーライドの例

次の例は、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 設定オーバーライドパラメータ」および「Spark 設定オーバーライドパラメータ」で説明されている優先度のオーバーライドのランキングに基づいて、次の分類と設定が適用されます。

  • 分類 spark-defaults は、ジョブレベルで指定したプロパティで更新されます。この分類では、StartJobRun に含まれるプロパティのみが考慮されます。

  • 分類 spark-executor-log4j2 は、既存の分類リストに追加されます。

  • 分類 spark-driver-log4j2 は削除されます。

  • managedPersistenceMonitoringConfiguration の設定は、ジョブレベルの設定で更新されます。

  • s3MonitoringConfiguration の設定は削除されます。

  • cloudWatchLoggingConfiguration の設定は、既存のモニタリング設定に追加されます。