当前位置:   article > 正文

Spark任务中的log4j简单配置方法

spark.driver.extrajavaoptions

Spark默认是集成log4j作为日志框架的,因此在我们的Spark作业中也使用log4j来输出日志。
不过,如果只是简单地将自定义的log4j.properties文件扔进项目的resources文件夹,然后直接打包运行的话,会发现程序根本不会鸟它,打印出来的日志与之前完全相同,也不会输出到文件。这时可以在spark-submit的driver JVM参数中,打开log4j的调试开关:

  1. bin/spark-submit \
  2. ......
  3. --conf "spark.driver.extraJavaOptions=-XX:+UseG1GC -Dlog4j.debug=true" \
  4. ......

然后程序运行时就会输出当前生效的log4j配置文件路径。我们是基于CDH安装的Spark,配置文件路径是/etc/spark/conf/log4j.properties,也就是默认的配置。它的内容如下:

  1. log4j.rootLogger=${root.logger}
  2. root.logger=INFO,console
  3. log4j.appender.console=org.apache.log4j.ConsoleAppender
  4. log4j.appender.console.target=System.err
  5. log4j.appender.console.layout=org.apache.log4j.PatternLayout
  6. log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
  7. shell.log.level=WARN
  8. log4j.logger.org.eclipse.jetty=WARN
  9. log4j.logger.org.spark-project.jetty=WARN
  10. log4j.logger.org.spark-project.jetty.util.component.AbstractLifeCycle=ERROR
  11. log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
  12. log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
  13. log4j.logger.org.apache.parquet=ERROR
  14. log4j.logger.parquet=ERROR
  15. log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
  16. log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR
  17. log4j.logger.org.apache.spark.repl.Main=${shell.log.level}
  18. log4j.logger.org.apache.spark.api.python.PythonGatewayServer=${shell.log.level}

可见里面只有控制台的输出。如果我们想全局更改所有Spark作业的日志格式,直接在这个文件里增加或修改Appender即可,如:

  1. log4j.rootLogger=INFO,C,R
  2. # 控制台输出卡在WARN
  3. log4j.appender.C=org.apache.log4j.ConsoleAppender
  4. log4j.appender.C.Threshold=WARN
  5. log4j.appender.C.layout=org.apache.log4j.PatternLayout
  6. log4j.appender.C.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p [%c] - %m%n
  7. # 新增滚动文件的日志输出
  8. log4j.appender.R=org.apache.log4j.RollingFileAppender
  9. log4j.appender.R.File=/var/projects/calendar/logs/calendar.log
  10. log4j.appender.R.Threshold=INFO
  11. log4j.appender.R.Append=true
  12. log4j.appender.R.MaxFileSize=16MB
  13. log4j.appender.R.MaxBackupIndex=10
  14. log4j.appender.R.layout=org.apache.log4j.PatternLayout
  15. log4j.appender.R.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p [%c] - %m%n
  16. # 以下照搬原文件配置,主要是防止一些Spark引用的第三方组件日志输出过多
  17. log4j.logger.org.eclipse.jetty=WARN
  18. log4j.logger.org.spark-project.jetty=WARN
  19. log4j.logger.org.spark-project.jetty.util.component.AbstractLifeCycle=ERROR
  20. ......

如果不采用全局更改日志配置的方法,还可以单独配置。分别更改driver和executor的spark-submit JVM参数如下:

  1. --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:/path/to/log4j.properties"
  2. --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:/path/to/log4j.properties"

我们的作业几乎都运行在yarn-cluster或者yarn-client模式下,需要配置文件在每个节点上都存在,因此可能还需要用--files参数将log4j.properties上传。
最后再更改一下日志文件的输出位置,就可以将作业日志与YARN container日志聚合在一起(回忆一下,Spark on YARN模式中,container:executor:task是1:1:n对应的),方便在UI界面查看:

log4j.appender.R.File=${spark.yarn.app.container.log.dir}/spark.log
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/389482
推荐阅读
相关标签
  

闽ICP备14008679号