設定 Amazon EMR Serverless 的 Apache Log4j2 屬性 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定 Amazon EMR Serverless 的 Apache Log4j2 屬性

此頁面說明如何在 設定無EMR伺服器任務的自訂 Apache Log4j 2.x 屬性StartJobRun。如果您想要在應用程式層級設定 Log4j 分類,請參閱 EMR Serverless 的預設應用程式組態

設定 Amazon EMR Serverless 的 Spark Log4j2 屬性

使用 Amazon 6.8.0 版和更新EMR版本,您可以自訂 Apache Log4j 2.x 屬性來指定精細的日誌組態。這可簡化對無EMR伺服器 Spark 任務的疑難排解。若要設定這些屬性,請使用 spark-driver-log4j2spark-executor-log4j2分類。

Spark 的 Log4j2 分類

若要自訂 Spark 日誌組態,請使用下列分類搭配 applicationConfiguration。若要設定 Log4j 2.x 屬性,請使用下列 properties

spark-driver-log4j2

此分類會設定驅動程式log4j2.properties檔案中的值。

spark-executor-log4j2

此分類會設定執行器log4j2.properties檔案中的值。

Spark 的 Log4j2 組態範例

下列範例示範如何使用 提交 Spark 任務applicationConfiguration,以自訂 Spark 驅動程式和執行器的 Log4j2 組態。

若要在應用程式層級設定 Log4j 分類,而不是在提交任務時設定,請參閱 EMR Serverless 的預設應用程式組態

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

下列程式碼範例示範如何在初始化應用程式的自訂 Log4j2 組態時建立 Spark 應用程式。

Python
範例 - 使用 Log4j2 搭配 Python 進行 Spark 任務
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
範例 - 將 Log4j2 用於 Spark 任務與 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() } }

若要在執行 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 考量事項

下列 Log4j2.x 屬性無法針對 Spark 程序設定:

  • rootLogger.appenderRef.stdout.ref

  • appender.console.type

  • appender.console.name

  • appender.console.target

  • appender.console.layout.type

  • appender.console.layout.pattern

如需有關您可以設定之 Log4j2.x 屬性的詳細資訊,請參閱 上的 log4j2.properties.template 檔案 GitHub。