Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Spark Streaming Standalone:保存日志_Scala_Logging_Apache Spark_Spark Streaming - Fatal编程技术网

Scala Spark Streaming Standalone:保存日志

Scala Spark Streaming Standalone:保存日志,scala,logging,apache-spark,spark-streaming,Scala,Logging,Apache Spark,Spark Streaming,我正在运行一个独立安装的spark流媒体应用程序(版本1.6.1)。当我使用spark submit运行应用程序时,终端上会显示日志。例如,如果应用程序失败了,这些信息在以后很有用,可以用来理解应用程序失败的原因 根据我对文档的阅读,我将spark.eventLog.enabled标志设置为true。但是,这仅将事件日志保存到tmp/spark events文件夹。在我看来,这些日志对我没有多大用处。由于许多例外,我的工作经常失败。存储终端中显示的这些日志(我猜是驱动程序日志?)并分析我的异常的

我正在运行一个独立安装的spark流媒体应用程序(版本1.6.1)。当我使用spark submit运行应用程序时,终端上会显示日志。例如,如果应用程序失败了,这些信息在以后很有用,可以用来理解应用程序失败的原因


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

如果您只想记录在驱动程序端发生的事件,最简单的方法是为spark提供日志配置文件。默认情况下,spark使用log4j进行日志记录,因此在启动spark提交作业时,您可以使用
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_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


还有,stdout日志丢失了。仅保存stderr日志。尚不清楚原因。

谢谢您的回复!我还没有机会测试这个。我刚试过这个,得到了很多log4j:WARN语句,结尾是:
“……log4j:ERROR找不到名为[FILE]的appender。使用Spark的默认log4j配置文件:org/apache/Spark/log4j defaults.properties'
@Aswin修复了它。应该是“RollingFileAppender”。谢谢,但我仍然收到错误日志。知道为什么会这样吗?我已将日志添加到问题的编辑部分。@Aswin由于某种原因,找不到
rolefileppender
类。也许您希望通过
spark.driver.extraClassPath