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-log4j2spark-executor-log4j2 분류를 사용합니다.

Spark에 대한 Log4j2 분류

Spark 로그 구성을 사용자 지정하려면 applicationConfiguration에서 다음 분류를 사용합니다. Log4j 2.x 속성을 구성하려면 다음 properties를 사용합니다.

spark-driver-log4j2

이 분류는 드라이버에 대한 log4j2.properties 파일의 값을 설정합니다.

spark-executor-log4j2

이 분류는 실행기에 대한 log4j2.properties 파일의 값을 설정합니다.

Spark에 대한 Log4j2 구성 예제

다음 예제에서는 Spark 드라이버 및 실행기에 대한 Log4j2 구성을 사용자 지정하기 위해 applicationConfiguration을 사용해 Spark 작업을 제출하는 방법을 보여줍니다.

작업을 제출할 때 대신 애플리케이션 수준에서 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 고려 사항

다음 Log4j2.x 속성은 Spark 프로세스에 대해 구성할 수 없습니다.

  • 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 file을 참조하세요.