[英]How can I prune executors' logs in spark streaming
我正在处理以独立模式运行的火花流作业。 默认情况下,执行程序将日志附加到$SPARK_HOME/work/app_idxxxx/stderr
和stdout
文件中。 现在,当应用程序运行了很长时间(比如一个月或更长时间)并且它在stderr
文件中生成大量日志时,问题就来了。 我想每天汇总 stderr 一周,然后存档(删除)。 我用org.apache.log4j.RollingFileAppender
更改了log4j.properties
,并将日志定向到一个文件而不是stderr
,但该文件不尊重滚动并不断增长。 创建一个 cron 作业来执行此操作也不起作用,因为 spark 有一个指向该特定文件的指针并且更改名称可能不起作用。
我找不到这些特定日志的任何文档。 我真的很感激任何帮助。
在深入挖掘之后,我终于找到了解决问题的方法,并将其发布在这里,这样下一个人就不会经历所有这些痛苦和试验/错误。 这些日志的设置在两个不同的地方。 $SPARK_HOME/conf/spark-default.conf
in each executor
程序中添加以下三行:
spark.executor.logs.rolling.time.interval daily
spark.executor.logs.rolling.strategy time
spark.executor.logs.rolling.maxRetainedFiles 7
您需要in each executor
程序中更改的另一个文件是$SPARK_HOME/conf/spark-env.sh
添加以下行:
SPARK_WORKER_OPTS="$SPARK_WORKER_OPTS -Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.interval=1800
-Dspark.worker.cleanup.appDataTtl=864000
-Dspark.executor.logs.rolling.strategy=time
-Dspark.executor.logs.rolling.time.interval=daily
-Dspark.executor.logs.rolling.maxRetainedFiles=7 "
export SPARK_WORKER_OPTS
这些更改后,它开始正常工作。 希望这可以帮助一些人:)
如果您处于独立模式,只需导出一个环境就足够了:
export SPARK_WORKER_OPTS="-Dspark.executor.logs.rolling.strategy=time -Dspark.executor.logs.rolling.time.interval=daily -Dspark.executor.logs.rolling.maxRetainedFiles=7"
你也可以参考: http ://apache-spark-user-list.1001560.n3.nabble.com/Executor-Log-Rotation-Is-Not-Working-td18024.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.