【问题标题】:Spark Streaming Standalone : Save logsSpark Streaming Standalone:保存日志
【发布时间】:2016-03-07 18:19:32
【问题描述】:

我正在独立设置(版本 1.6.1)上运行火花流应用程序。当我使用 spark-submit 运行应用程序时,日志会显示在终端上。这些在以后很有用,例如,了解应用程序失败的原因是什么,如果它失败了。

根据我阅读的文档,我已将 spark.eventLog.enabled 标志设置为 true。但是,这只会将事件日志保存到 tmp/spark-events 文件夹。在我看来,这些日志对我没有多大用处。由于许多例外,我的工作经常失败。存储这些显示在终端中的日志(我猜是驱动程序日志?)并分析我的异常的正确方法是什么?

【问题讨论】:

    标签: scala logging apache-spark spark-streaming


    【解决方案1】:

    如果您只想记录发生在 驱动程序 端的事件,最简单的方法是为 spark 提供一个日志记录配置文件。默认情况下,spark 使用 log4j 进行日志记录,因此在启动 spark-submit 作业时,您可以使用 spark.driver.extraJavaOptions 标志传递您的 log4j 配置,并为其添加 RollingFileAppender

    spark.driver.extraJavaOptions=-Dlog4j.configuration=/path/to/your/log4j.xml
    

    这是 log4j-1.2 滚动 appender xml 的基本模式:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration>
        <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
            <file value="log.txt" />
            <appendToFile value="true" />
            <rollingStyle value="Size" />
            <maxSizeRollBackups value="10" />
            <maximumFileSize value="100KB" />
            <staticLogFileName value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
            </layout>
        </appender>
        <logger name="log4j.rootLogger" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="RollingFileAppender"/>
    </logger>
    </log4j:configuration>
    

    您可以在 spark 文档的 Spark Configuration 部分找到更多信息。

    如果您还想记录驱动节点上发生的事件,那么我建议您研究一个可以从分布式系统收集日志的外部服务。

    【讨论】:

    • 感谢您的回复!我还没有机会测试这个。会尽快回来
    • 嘿,我刚试过这个,最后得到了很多 log4j:WARN 语句:'....log4j:ERROR No appender named [FILE] could be found. Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties'
    • @Aswin 已修复。它应该是“RollingFileAppender”。
    • 谢谢,但我仍然收到错误日志。知道为什么会发生这些吗?我已将日志添加到问题的“编辑”部分。
    • @Aswin 出于某种原因,它没有找到 RoleFileAppender 类。也许您想通过spark.driver.extraClassPath 明确地将 log4j jar 传递给 spark 驱动程序
    【解决方案2】:

    我将这些行添加到 SPARK_HOME/conf/log4j.properties

    log4j.rootLogger=ERROR, file
    log4j.appender.file=org.apache.log4j.FileAppender
    log4j.appender.file.File=/tmp/application.log
    log4j.appender.file.append=false
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    

    可以使用任何 log4j 附加程序。我在这里使用文件附加程序。

    P.S 仍然缺少标准输出日志。仅保存 stderr 日志。还没有弄清楚为什么。

    【讨论】:

      猜你喜欢
      • 2018-11-25
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      • 2020-12-17
      相关资源
      最近更新 更多