前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spark stream配置log输出

spark stream配置log输出

作者头像
平凡的学生族
发布2020-06-23 16:28:50
1.8K0
发布2020-06-23 16:28:50
举报
文章被收录于专栏:后端技术后端技术

参考解决spark streaming长时间运行日志不断增长问题

目的

本教程适用以下问题:

  • spark stream运行过久时,日志不断增长
  • 希望修改输出日志的格式
  • 配置executor端的输出

正文

在cluster模式下,spark-submit添加如下参数。两个--conf分别为driver和executor设置log4j的配置文件,--files将文件上传到集群

代码语言:javascript
复制
--conf spark.driver.extraJavaOptions=-Dlog4j.configuration=file:driver-log4j.properties 
--conf spark.executor.extraJavaOptions=-Dlog4j.configuration=file:executor-log4j.properties 
--files ./driver-log4j.properties,./executor-log4j.properties

driver-log4j.properties

代码语言:javascript
复制
log4j.rootLogger =info,stdout

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm} %5p %t %c{2}:%L - %m%n

此处driver端只进行标准输出, 并不保存到文件。如果保存到文件,路径中不要使用${spark.yarn.app.container.log.dir},因为driver初始化log4j时,该参数还未设置,直到executor启动时才设置。 executor-log4j.properties

代码语言:javascript
复制
log4j.rootLogger =info,stdout,rolling

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm} %5p %t %c{2}:%L - %m%n

log4j.appender.rolling=org.apache.log4j.RollingFileAppender
log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
log4j.appender.rolling.layout.conversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %5p %t %c{2}:%L - %m%n
log4j.appender.rolling.maxFileSize=100MB
log4j.appender.rolling.maxBackupIndex=5
log4j.appender.rolling.file=${spark.yarn.app.container.log.dir}/stdout
log4j.appender.rolling.encoding=UTF-8

${spark.yarn.app.container.log.dir}这个参数[1]来自spark官网running-on-yarn教程

If you need a reference to the proper location to put log files in the YARN so that YARN can properly display and aggregate them, use spark.yarn.app.container.log.dir in your log4j.properties. For example, log4j.appender.file_appender.File=${spark.yarn.app.container.log.dir}/spark.log. For streaming applications, configuring RollingFileAppender and setting file location to YARN’s log directory will avoid disk overflow caused by large log files, and logs can be accessed using YARN’s log utility.

值得留意的是,如果你不配置该参数,会报错java.io.FileNotFoundException

executor既进行标准输出又要输出到文件。标准输出其实主要是方便client时调试;在cluster模式下,如果不需要在打印台查看日志,标准输出完全可以去掉。输出到文件有利于在webUI里查看。 log4j.appender.rolling.file的文件为stdout,方便对标准输出的日志和输出到文件的日志进行统一的日志滚动管理,避免标准输出的日志文件越来越大。(当文件过大后,会出现stdout、stdout.1、stdout.2等文件)


  1. 关于这个参数,还建议阅读https://anil.cloud/2017/07/11/an-approach-for-logging-in-spark-jobs/
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目的
  • 正文
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档