Apache Spark 3+日志关闭方法及Spark-submit日志过多问题解决
解决Spark-submit日志过多的问题
核心问题定位
你的日志配置未生效的关键原因是:Spark不会自动识别log4j2.templates作为日志配置文件,它默认只会加载conf目录下的log4j2.properties或log4j2.xml文件。
可行解决方案
方案1:修改全局配置文件(永久生效)
- 重命名配置文件:将
log4j2.templates改名为log4j2.properties,放到Spark安装目录的conf文件夹下(如$SPARK_HOME/conf/)。 - 更新配置内容,将日志级别降至ERROR并简化输出格式:
# 根日志级别设置为ERROR,仅输出错误信息 rootLogger.level = ERROR rootLogger.appenderRef.stdout.ref = console # 控制台输出格式配置,减少冗余信息 appender.console.type = Console appender.console.name = console appender.console.layout.type = PatternLayout appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
方案2:提交命令时指定自定义配置(临时生效)
如果不想修改全局配置,可在spark-submit命令中通过JVM参数指定你的配置文件路径(需使用绝对路径):
spark-submit --driver-java-options "-Dlog4j.configurationFile=file:/absolute/path/to/your/log4j2.properties" your_spark_script.py
方案3:代码内动态设置日志级别
若需在代码中控制日志,必须在SparkSession初始化前配置,同时关闭py4j的冗余日志(这是Spark日志的重灾区):
import logging from pyspark.sql import SparkSession # 关闭py4j的日志输出 logging.getLogger("py4j").setLevel(logging.ERROR) # 初始化SparkSession前设置日志级别 spark = SparkSession.builder.appName("YourApp").getOrCreate() spark.sparkContext.setLogLevel("ERROR")
内容的提问来源于stack exchange,提问作者X HOxha
相关产品推荐
相关产品推荐

