[英]Spark Streaming Standalone : Save logs
我正在独立设置(版本1.6.1)上运行Spark-streaming应用程序。 当我使用spark-submit运行应用程序时,日志显示在终端上。 这些在以后很有用,例如,了解应用失败的原因(如果失败)。
通过阅读文档,我将spark.eventLog.enabled
标志设置为true。 但是,这只会将事件日志保存到tmp / spark-events文件夹。 如我所见,这些日志对我没有多大用处。 由于许多例外,我的工作经常失败。 存储这些显示在终端中的日志(我想是驱动程序日志)并分析异常的正确方法是什么?
如果只想记录驱动程序侧发生的事件,最简单的方法是为spark提供一个记录配置文件。 默认情况下,spark使用log4j进行日志记录,因此在开始执行spark-submit作业时,可以使用spark.driver.extraJavaOptions
标志传入log4j配置,并向其中添加RollingFileAppender
:
spark.driver.extraJavaOptions=-Dlog4j.configuration=/path/to/your/log4j.xml
这是log4j-1.2滚动附加程序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部分中找到更多信息。
如果您还希望记录驱动程序节点上发生的事件,那么建议您研究一下可以从分布式系统中收集日志的外部服务。
我将这些行添加到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附加程序。 我在这里使用文件追加程序。
PS仍然,标准输出日志丢失。 仅保存stderr日志。 尚未弄清楚原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.