我在独立设置(版本1.6.1)上运行spark-streaming应用程序。当我使用spark-submit运行应用程序时,日志会显示在终端上。例如,这些对于了解应用程序失败的原因(如果失败)有用。
从我阅读的文档中,我将spark.eventLog.enabled
标志设置为true。但是,这只将事件日志保存到tmp / spark-events文件夹。正如我所看到的,这些日志对我来说没什么用处。由于许多例外,我的工作经常失败。存储显示在终端中的这些日志的正确方法是什么(我猜,驱动程序记录?)并分析我的例外情况?
答案 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日志。然而要找出原因。