Configure las propiedades de Apache Log4j2 para Amazon EMR sin servidor - Amazon EMR

Configure las propiedades de Apache Log4j2 para Amazon EMR sin servidor

Esta página describe cómo configurar las propiedades personalizadas de Apache Log4j 2.x para trabajos de EMR sin servidor en StartJobRun. Si desea configurar las clasificaciones de Log4j a nivel de aplicación, consulte Configuración predeterminada de aplicación para EMR sin servidor.

Configure las propiedades de Spark Log4j2 para Amazon EMR sin servidor

Con las versiones 6.8.0 y posteriores de Amazon EMR, puede personalizar las propiedades de Apache Log4j 2.x para especificar configuraciones de registro detalladas. Esto simplifica la solución de problemas de sus trabajos de Spark en EMR sin servidor. Para configurar estas propiedades, utilice las clasificaciones spark-driver-log4j2 y spark-executor-log4j2.

Clasificaciones de Log4j2 para Spark

Para personalizar las configuraciones de registro de Spark, utilice las siguientes clasificaciones con applicationConfiguration. Para configurar las propiedades de Log4j 2.x, utilice la siguientes properties.

spark-driver-log4j2

Esta clasificación establece los valores en el archivo log4j2.properties del controlador.

spark-executor-log4j2

Esta clasificación establece los valores en el archivo log4j2.properties del ejecutor.

Ejemplo de configuración de Log4j2 para Spark

En el siguiente ejemplo, se muestra cómo enviar un trabajo de Spark con applicationConfiguration para personalizar las configuraciones de Log4j2 para el controlador y ejecutor de Spark.

Para configurar las clasificaciones de Log4j a nivel de aplicación, en lugar de al enviar el trabajo, consulte Configuración predeterminada de aplicación para EMR sin servidor.

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" } } ] }'

Log4j2 en trabajos de Spark de ejemplo

Los siguientes ejemplos de código muestran cómo crear una aplicación de Spark mientras se inicializa una configuración de Log4j2 personalizada para la aplicación.

Python
ejemplo - Uso de Log4j2 para un trabajo de Spark con Python
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()

Para personalizar Log4j2 para el controlador cuando ejecuta un trabajo de Spark, puede usar la siguiente configuración:

{ "classification": "spark-driver-log4j2", "properties": { "rootLogger.level":"error", // only display Spark error logs "logger.PySparkApp.level": "info", "logger.PySparkApp.name": "PySparkApp" } }
Scala
ejemplo - Uso de Log4j2 para un trabajo de Spark con Scala
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() } }

Para personalizar Log4j2 para el controlador cuando ejecuta un trabajo de Spark, puede usar la siguiente configuración:

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

Consideraciones de Log4j2 para Spark

Las siguientes propiedades de Log4j2.x no se pueden configurar para los procesos de Spark:

  • rootLogger.appenderRef.stdout.ref

  • appender.console.type

  • appender.console.name

  • appender.console.target

  • appender.console.layout.type

  • appender.console.layout.pattern

Para obtener información detallada sobre las propiedades de Log4j2.x que puede configurar, consulte el archivo log4j2.properties.template en GitHub.