

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon EMR Serverless の Apache Log4j2 プロパティを設定する
<a name="log4j2"></a>

このページでは、`StartJobRun` で EMR Serverless ジョブのカスタム [Apache Log4j 2.x](https://logging.apache.org/log4j/2.x/) プロパティを設定する方法について説明します。アプリケーションレベルで Log4j 分類を設定する場合は、「[EMR Serverless のデフォルトのアプリケーション設定](default-configs.md)」を参照してください。

## Amazon EMR Serverless の Spark Log4j2 プロパティを設定する
<a name="log4j2-spark"></a>

Amazon EMR リリース 6.8.0 以降では、[Apache Log4j 2.x](https://logging.apache.org/log4j/2.x/) プロパティをカスタマイズして、詳細なログ設定を指定できます。これにより、EMR Serverless での Spark ジョブのトラブルシューティングが容易になります。これらのプロパティを設定するには、`spark-driver-log4j2` および `spark-executor-log4j2` の分類を使用します。

**Topics**
+ [Spark の Log4j2 分類](#log4j2-spark-class)
+ [Spark の Log4j2 設定例](#log4j2-spark-example)
+ [サンプル Spark ジョブの Log4j2](#log4j2-spark-jobs)
+ [Spark の Log4j2 に関する考慮事項](#log4j2-spark-considerations)

### Spark の Log4j2 分類
<a name="log4j2-spark-class"></a>

Spark ログ設定をカスタマイズするには、[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) で次の分類を使用します。Log4j 2.x プロパティを設定するには、次の [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`**  
この分類は、ドライバーの `log4j2.properties` ファイル内の値を設定します。

**`spark-executor-log4j2`**  
この分類は、エグゼキュターの `log4j2.properties` ファイル内の値を設定します。

### Spark の Log4j2 設定例
<a name="log4j2-spark-example"></a>

次の例は、`applicationConfiguration` を使用して Spark ジョブを送信し、Spark ドライバーとエグゼキュターの Log4j2 設定をカスタマイズする方法を示しています。

ジョブを送信するときではなく、アプリケーションレベルで Log4j 分類を設定するには、「[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"
                }
            }
       ]
    }'
```

### サンプル Spark ジョブの Log4j2
<a name="log4j2-spark-jobs"></a>

次のコードサンプルは、アプリケーションのカスタム Log4j2 設定を初期化する際に Spark アプリケーションを作成する方法を示しています。

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

**Example - 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 ]

**Example - 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 に関する考慮事項
<a name="log4j2-spark-considerations"></a>

Spark プロセスでは、次の Log4j2.x プロパティは設定できません。
+ `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` ファイル](https://github.com/apache/spark/blob/v3.3.0/conf/log4j2.properties.template)」を参照してください。