修改log4j.properties仍无法抑制Spark INFO日志的问题求助
Spark INFO日志抑制失效问题排查与解决
- 先确认配置文件的有效性
Spark默认只会加载conf目录下的log4j.properties文件,很多时候该目录下只有模板文件log4j.properties.template。你需要先复制模板生成正式配置文件:
cp /usr/local/Cellar/apache-spark/3.3.0/libexec/conf/log4j.properties.template /usr/local/Cellar/apache-spark/3.3.0/libexec/conf/log4j.properties
修改复制后的文件,将log4j.rootCategory=INFO, console改为log4j.rootCategory=ERROR, console,注意检查拼写、大小写和逗号后的空格是否正确。
- 修正提交命令的参数格式
你使用的spark.driver.extraJavaOptions参数可能存在两个问题:- 如果是集群模式,仅配置driver的参数不够,还需覆盖executor的日志级别;
- 路径未用引号包裹可能导致解析错误,建议调整命令为:
spark-submit --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:///usr/local/Cellar/apache-spark/3.3.0/libexec/conf/log4j.properties" --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:///usr/local/Cellar/apache-spark/3.3.0/libexec/conf/log4j.properties" somepythonscript.py
- 验证配置文件是否被加载
添加-Dlog4j.debug参数查看log4j初始化细节,确认是否读取到你的配置文件:
spark-submit --conf "spark.driver.extraJavaOptions=-Dlog4j.debug -Dlog4j.configuration=file:///usr/local/Cellar/apache-spark/3.3.0/libexec/conf/log4j.properties" somepythonscript.py
执行后查找日志中类似Reading configuration from URL的行,检查路径是否指向你指定的文件。
排查是否存在其他覆盖项
- 检查Python脚本中是否通过代码设置了日志级别(比如
sc.setLogLevel("INFO")),若有则改为sc.setLogLevel("ERROR"); - 执行
echo $LOG4J_CONFIGURATION查看环境变量,若该变量有值会覆盖命令行参数,需清空后重试。
- 检查Python脚本中是否通过代码设置了日志级别(比如
适配Spark 3.x的log4j2情况
部分Spark 3.x版本默认使用log4j2而非log4j1,此时需配置log4j2.properties:
cp /usr/local/Cellar/apache-spark/3.3.0/libexec/conf/log4j2.properties.template /usr/local/Cellar/apache-spark/3.3.0/libexec/conf/log4j2.properties
修改文件中rootLogger.level = info为rootLogger.level = error,提交命令对应参数改为:
spark-submit --conf "spark.driver.extraJavaOptions=-Dlog4j.configurationFile=file:///usr/local/Cellar/apache-spark/3.3.0/libexec/conf/log4j2.properties" somepythonscript.py
内容的提问来源于stack exchange,提问作者Morgan
相关产品推荐
相关产品推荐

