Spark Streaming Standalone:保存日志

时间:2016-03-02 14:26:59

标签: scala logging apache-spark spark-streaming

我在独立设置(版本1.6.1)上运行spark-streaming应用程序。当我使用spark-submit运行应用程序时,日志会显示在终端上。例如,这些对于了解应用程序失败的原因(如果失败)有用。

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

2 个答案:

答案 0 :(得分: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部分找到更多信息。

如果您还要记录驱动程序节点上发生的事件,那么我建议您查看可以从分布式系统收集日志的外部服务。

答案 1 :(得分:0)

我将这些行添加到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 appender。我在这里使用文件appender。

P.S仍然缺少stdout日志。仅保存stderr日志。然而要找出原因。