美文网首页
spark stream配置log输出

spark stream配置log输出

作者: 不存在的里皮 | 来源:发表于2020-06-22 10:16 被阅读0次

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

    目的

    本教程适用以下问题:

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

    正文

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

    --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

    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

    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/

    相关文章

      网友评论

          本文标题:spark stream配置log输出

          本文链接:https://www.haomeiwen.com/subject/httxfktx.html