Apache Log4j2-Eigenschaften für Amazon Serverless konfigurieren EMR - Amazon EMR

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Apache Log4j2-Eigenschaften für Amazon Serverless konfigurieren EMR

Auf dieser Seite wird beschrieben, wie Sie benutzerdefinierte Apache Log4j 2.x-Eigenschaften für serverlose Jobs unter konfigurieren. EMR StartJobRun Informationen zur Konfiguration von Log4j-Klassifizierungen auf Anwendungsebene finden Sie unter. Standardanwendungskonfiguration für Serverless EMR

Konfigurieren Sie die Spark Log4j2-Eigenschaften für Amazon Serverless EMR

Mit EMR Amazon-Versionen 6.8.0 und höher können Sie die Eigenschaften von Apache Log4j 2.x anpassen, um detaillierte Protokollkonfigurationen zu spezifizieren. Dies vereinfacht die Fehlerbehebung bei Ihren Spark-Jobs auf Serverless. EMR Verwenden Sie die spark-executor-log4j2 Klassifizierungen spark-driver-log4j2 und, um diese Eigenschaften zu konfigurieren.

Log4j2-Klassifizierungen für Spark

Um die Spark-Protokollkonfigurationen anzupassen, verwenden Sie die folgenden Klassifizierungen mit. applicationConfiguration Verwenden Sie Folgendes, um die Log4j 2.x-Eigenschaften zu konfigurieren. properties

spark-driver-log4j2

Diese Klassifizierung legt die Werte in der log4j2.properties Datei für den Treiber fest.

spark-executor-log4j2

Diese Klassifizierung legt die Werte in der log4j2.properties Datei für den Executor fest.

Log4j2-Konfigurationsbeispiel für Spark

Das folgende Beispiel zeigt, wie Sie einen Spark-Job einreichen, applicationConfiguration um die Log4J2-Konfigurationen für den Spark-Treiber und -Executor anzupassen.

Informationen zur Konfiguration von Log4j-Klassifizierungen auf Anwendungsebene und nicht erst beim Absenden des Jobs finden Sie unter. Standardanwendungskonfiguration für Serverless EMR

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 in Spark-Beispielaufträgen

Die folgenden Codebeispiele zeigen, wie Sie eine Spark-Anwendung erstellen, während Sie eine benutzerdefinierte Log4j2-Konfiguration für die Anwendung initialisieren.

Python
Beispiel - Log4j2 für einen Spark-Job mit Python verwenden
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()

Um Log4j2 für den Treiber anzupassen, wenn Sie einen Spark-Job ausführen, können Sie die folgende Konfiguration verwenden:

{ "classification": "spark-driver-log4j2", "properties": { "rootLogger.level":"error", // only display Spark error logs "logger.PySparkApp.level": "info", "logger.PySparkApp.name": "PySparkApp" } }
Scala
Beispiel - Verwenden von Log4j2 für einen Spark-Job mit 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() } }

Um Log4j2 für den Treiber anzupassen, wenn Sie einen Spark-Job ausführen, können Sie die folgende Konfiguration verwenden:

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

Überlegungen zu Log4j2 für Spark

Die folgenden Log4j2.x-Eigenschaften sind für Spark-Prozesse nicht konfigurierbar:

  • rootLogger.appenderRef.stdout.ref

  • appender.console.type

  • appender.console.name

  • appender.console.target

  • appender.console.layout.type

  • appender.console.layout.pattern

Ausführliche Informationen zu den Log4j2.x-Eigenschaften, die Sie konfigurieren können, finden Sie in der Datei unter. log4j2.properties.template GitHub