Configuração das propriedades do Apache Log4j2 para o Amazon EMR Sem Servidor - Amazon EMR

Configuração das propriedades do Apache Log4j2 para o Amazon EMR Sem Servidor

Esta página descreve como configurar propriedades personalizadas do Apache Log4j 2.x para trabalhos do EMR Sem Servidor em StartJobRun. Caso queira configurar as classificações do Log4j no nível da aplicação, consulte Configuração padrão de aplicações do EMR Sem Servidor.

Configuração das propriedades do Log4j2 do Spark para o Amazon EMR Sem Servidor

Com as versões 6.8.0 e posteriores do Amazon EMR, você pode personalizar as propriedades do Apache Log4j 2.x e especificar configurações de log refinadas. Isso simplifica a solução de problemas dos tranalhos do Spark no EMR Sem Servidor. Para configurar essas propriedades, use as classificações spark-driver-log4j2 e spark-executor-log4j2.

Classificações do Log4j2 para o Spark

Para personalizar as configurações de log do Spark, use as classificações a seguir com applicationConfiguration. Para configurar as propriedades do Log4j 2.x, use as properties a seguir.

spark-driver-log4j2

Essa classificação define os valores no arquivo log4j2.properties do driver.

spark-executor-log4j2

Essa classificação define os valores no arquivo log4j2.properties do executor.

Exemplo de configuração do Log4j2 para o Spark

O exemplo a seguir mostra como enviar um trabalho do Spark com applicationConfiguration para personalizar as configurações do Log4j2 para o driver e o executor do Spark.

Para configurar as classificações do Log4j no nível da aplicação, em vez de quando você envia o trabalho, consulte Configuração padrão de aplicações do EMR Sem 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 em exemplos de trabalhos do Spark

Os exemplos de código a seguir demonstram como criar uma aplicação do Spark enquanto você inicializa uma configuração personalizada do Log4j2 para a aplicação.

Python
exemplo - Usando o Log4j2 para um trabalho do Spark com 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 o Log4j2 do driver ao executar um trabalho do Spark, você pode usar a seguinte configuração:

{ "classification": "spark-driver-log4j2", "properties": { "rootLogger.level":"error", // only display Spark error logs "logger.PySparkApp.level": "info", "logger.PySparkApp.name": "PySparkApp" } }
Scala
exemplo - Usando o Log4j2 para um trabalho do Spark com 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 o Log4j2 do driver ao executar um trabalho do Spark, você pode usar a seguinte configuração:

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

Considerações sobre o Log4j2 para o Spark

As seguintes propriedades do Log4j2.x não são configuráveis para processos do Spark:

  • rootLogger.appenderRef.stdout.ref

  • appender.console.type

  • appender.console.name

  • appender.console.target

  • appender.console.layout.type

  • appender.console.layout.pattern

Para obter informações detalhadas sobre as propriedades do Log4j2.x que você pode configurar, consulte o arquivo log4j2.properties.template no GitHub.