Amazon EMR Serverless の Apache Log4j2 プロパティを設定する - Amazon EMR

Amazon EMR Serverless の Apache Log4j2 プロパティを設定する

このページでは、StartJobRun で EMR Serverless ジョブのカスタム Apache Log4j 2.x プロパティを設定する方法について説明します。アプリケーションレベルで Log4j 分類を設定する場合は、「EMR Serverless のデフォルトのアプリケーション設定」を参照してください。

Amazon EMR Serverless の Spark Log4j2 プロパティを設定する

Amazon EMR リリース 6.8.0 以降では、Apache Log4j 2.x プロパティをカスタマイズして、詳細なログ設定を指定できます。これにより、EMR Serverless での Spark ジョブのトラブルシューティングが容易になります。これらのプロパティを設定するには、spark-driver-log4j2 および spark-executor-log4j2 の分類を使用します。

Spark の Log4j2 分類

Spark ログ設定をカスタマイズするには、applicationConfiguration で次の分類を使用します。Log4j 2.x プロパティを設定するには、次の properties を使用します。

spark-driver-log4j2

この分類は、ドライバーの log4j2.properties ファイル内の値を設定します。

spark-executor-log4j2

この分類は、エグゼキュターの log4j2.properties ファイル内の値を設定します。

Spark の Log4j2 設定例

次の例は、applicationConfiguration を使用して Spark ジョブを送信し、Spark ドライバーとエグゼキュターの Log4j2 設定をカスタマイズする方法を示しています。

ジョブを送信するときではなく、アプリケーションレベルで Log4j 分類を設定するには、「EMR Serverless のデフォルトのアプリケーション設定」を参照してください。

aws emr-serverless start-job-run \ --application-id application-id \ --execution-role-arn job-role-arn \ --job-driver '{ "sparkSubmit": { "entryPoint": "/usr/lib/spark/examples/jars/spark-examples.jar", "entryPointArguments": ["1"], "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi --conf spark.executor.cores=4 --conf spark.executor.memory=20g --conf spark.driver.cores=4 --conf spark.driver.memory=8g --conf spark.executor.instances=1" } }' --configuration-overrides '{ "applicationConfiguration": [ { "classification": "spark-driver-log4j2", "properties": { "rootLogger.level":"error", // will only display Spark error logs "logger.IdentifierForClass.name": "classpath for setting logger", "logger.IdentifierForClass.level": "info" } }, { "classification": "spark-executor-log4j2", "properties": { "rootLogger.level":"error", // will only display Spark error logs "logger.IdentifierForClass.name": "classpath for setting logger", "logger.IdentifierForClass.level": "info" } } ] }'

サンプル Spark ジョブの Log4j2

次のコードサンプルは、アプリケーションのカスタム Log4j2 設定を初期化する際に Spark アプリケーションを作成する方法を示しています。

Python
例 - Python で Spark ジョブに Log4j2 を使用する
import os import sys from pyspark import SparkConf, SparkContext from pyspark.sql import SparkSession app_name = "PySparkApp" if __name__ == "__main__": spark = SparkSession\ .builder\ .appName(app_name)\ .getOrCreate() spark.sparkContext._conf.getAll() sc = spark.sparkContext log4jLogger = sc._jvm.org.apache.log4j LOGGER = log4jLogger.LogManager.getLogger(app_name) LOGGER.info("pyspark script logger info") LOGGER.warn("pyspark script logger warn") LOGGER.error("pyspark script logger error") // your code here spark.stop()

Spark ジョブの実行時にドライバーの Log4j2 をカスタマイズするには、次の設定を使用します。

{ "classification": "spark-driver-log4j2", "properties": { "rootLogger.level":"error", // only display Spark error logs "logger.PySparkApp.level": "info", "logger.PySparkApp.name": "PySparkApp" } }
Scala
例 - Scala で Spark ジョブに Log4j2 を使用する
import org.apache.log4j.Logger import org.apache.spark.sql.SparkSession object ExampleClass { def main(args: Array[String]): Unit = { val spark = SparkSession .builder .appName(this.getClass.getName) .getOrCreate() val logger = Logger.getLogger(this.getClass); logger.info("script logging info logs") logger.warn("script logging warn logs") logger.error("script logging error logs") // your code here spark.stop() } }

Spark ジョブの実行時にドライバーの Log4j2 をカスタマイズするには、次の設定を使用します。

{ "classification": "spark-driver-log4j2", "properties": { "rootLogger.level":"error", // only display Spark error logs "logger.ExampleClass.level": "info", "logger.ExampleClass.name": "ExampleClass" } }

Spark の Log4j2 に関する考慮事項

Spark プロセスでは、次の Log4j2.x プロパティは設定できません。

  • rootLogger.appenderRef.stdout.ref

  • appender.console.type

  • appender.console.name

  • appender.console.target

  • appender.console.layout.type

  • appender.console.layout.pattern

設定できる Log4j2.x プロパティの詳細については、GitHub の「log4j2.properties.template ファイル」を参照してください。