如何清除火花历史事件日志而不停止火花流

时间:2017-03-14 08:27:44

标签: apache-spark spark-streaming

我们有一个火花串流应用程序,这是一个长期运行的任务。事件日志指向hdfs位置hdfs:// spark-history,当我们启动流应用程序和文件大小增长到70GB时,正在创建application_XXX.inprogress文件。要删除日志文件,我们将停止火花串流应用程序并清除它。 有没有办法在不停止或重新启动应用程序的情况下自动执行此过程。我们已将spark.history.fs.cleaner.enabled = true配置为清洁间隔为1天,最大年龄为2天。但是它没有清理.inprogress文件。我们正在使用spark 1.6.2版本。我们在纱线上运行火花并以群集模式部署。

1 个答案:

答案 0 :(得分:0)

此问题您必须在少数配置中进行一些更改,您必须对文件yarn-default.xml添加一些更改。在此文件中,您需要更改此行或添加此行:

yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds=3600

此修改会将您的文件汇总到您,这样您就可以通过yarn logs -applicationId YOUR_APP_ID

查看数据

这是第一步。你可以看一下这个here

Seccond步骤您需要创建一个文件log4j-driver.property和一个log4j-executor.property

在此文件中,您可以使用此示例:

log4j.rootLogger=INFO, rolling
log4j.appender.rolling=org.apache.log4j.RollingFileAppender
log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
log4j.appender.rolling.layout.conversionPattern=[%d] %p %m (%c)%n
log4j.appender.rolling.maxFileSize=50MB
log4j.appender.rolling.maxBackupIndex=5
log4j.appender.rolling.file=/var/log/spark/${dm.logging.name}.log
log4j.appender.rolling.encoding=UTF-8
log4j.logger.org.apache.spark=WARN
log4j.logger.org.eclipse.jetty=WARN
log4j.logger.com.anjuke.dm=${dm.logging.level}

这些行是什么?

这家伙:log4j.appender.rolling.maxFileSize=50MB将只创建50MB大小的文件。当一个日志文件达到50MB时,它将被关闭,一个新文件将开始。

相关的另一行是这一行:log4j.appender.rolling.maxBackupIndex=5这意味着您将拥有5个50MB文件的备份历史记录。在此期间,当新文件开始显示时,这将被删除。

创建此日志文件后,您需要通过spark-submit命令发送此文件:

spark-submit
  --master spark://127.0.0.1:7077
  --driver-java-options "-Dlog4j.configuration=file:/path/to/log4j-driver.properties -Ddm.logging.level=DEBUG"
  --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:/path/to/log4j-executor.properties -Ddm.logging.name=myapp -Ddm.logging.level=DEBUG"
  ...

您可以为您的Driver和您的Workers创建一个日志文件。在命令中,我使用了两个不同的文件,但您可以使用相同的文件。有关详细信息,请参阅here