

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 EMR Serverless konfigurieren
<a name="log4j2"></a>

Auf dieser Seite wird beschrieben, wie Sie benutzerdefinierte [Apache Log4j 2.x-Eigenschaften](https://logging.apache.org/log4j/2.x/) für EMR Serverless-Jobs unter konfigurieren. `StartJobRun` Wenn Sie Log4j-Klassifizierungen auf Anwendungsebene konfigurieren möchten, finden Sie weitere Informationen unter. [Standardanwendungskonfiguration für EMR Serverless](default-configs.md)

## Konfigurieren Sie die Spark Log4J2-Eigenschaften für Amazon EMR Serverless
<a name="log4j2-spark"></a>

Mit den Amazon EMR-Versionen 6.8.0 und höher können Sie die Eigenschaften von [Apache Log4j 2.x](https://logging.apache.org/log4j/2.x/) anpassen, um detaillierte Protokollkonfigurationen zu spezifizieren. Dies vereinfacht die Fehlerbehebung Ihrer Spark-Jobs auf EMR Serverless. Verwenden Sie die Klassifizierungen `spark-driver-log4j2` und`spark-executor-log4j2`, um diese Eigenschaften zu konfigurieren.

**Topics**
+ [Log4j2-Klassifizierungen für Spark](#log4j2-spark-class)
+ [Log4j2-Konfigurationsbeispiel für Spark](#log4j2-spark-example)
+ [Log4j2 in Spark-Beispielaufträgen](#log4j2-spark-jobs)
+ [Überlegungen zu Log4j2 für Spark](#log4j2-spark-considerations)

### Log4j2-Klassifizierungen für Spark
<a name="log4j2-spark-class"></a>

Um die Spark-Protokollkonfigurationen anzupassen, verwenden Sie die folgenden Klassifizierungen mit. [https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-applicationConfiguration](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_ConfigurationOverrides.html#emrserverless-Type-ConfigurationOverrides-applicationConfiguration) Verwenden Sie Folgendes, um die Log4j 2.x-Eigenschaften zu konfigurieren. [https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_Configuration.html#emrserverless-Type-Configuration-properties](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_Configuration.html#emrserverless-Type-Configuration-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
<a name="log4j2-spark-example"></a>

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, wenn Sie den Job einreichen, finden Sie unter. [Standardanwendungskonfiguration für EMR Serverless](default-configs.md)

```
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
<a name="log4j2-spark-jobs"></a>

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

------
#### [ Python ]

**Example - 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()
```
Verwenden Sie die folgende Konfiguration, um Log4j2 für den Treiber anzupassen, wenn Sie einen Spark-Job ausführen:  

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

------
#### [ Scala ]

**Example - 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()
  }
}
```
Verwenden Sie die folgende Konfiguration, um Log4j2 für den Treiber anzupassen, wenn Sie einen Spark-Job ausführen:  

```
{
   "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
<a name="log4j2-spark-considerations"></a>

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 konfiguriert werden, finden Sie in der Datei unter. `log4j2.properties.template`](https://github.com/apache/spark/blob/v3.3.0/conf/log4j2.properties.template) GitHub