spark不同模式下应用程序运行的日志存放位置

  今天一个同学问我,为什么他昨天跑完程序的日志输出,今天找不到了。是什么原因呢?他的运行模式是yarn-cluster,前一天运行完在userlogs目录下有以他的application编号命名的文件夹。想让我看一下我的对应目录是否有这样的情况?

  我查看了我自己的日志目录,没有userlogs这个目录,不科学呀,我明明运行成功过spark应用程序。于是在网上查找了一下,发现了如下两个问题:

(1) spark的应用程序运行结果输出日志在yarn和standalone模式下位置不一样,在yarn模式下,日志输出位置在你NodeManager节点(ResourceManager节点下没输出)的hadoop安装目录/logs/userlogs/目录下,而我是用的Standalone模式,对应的日志输出在我的NodeManager节点的 spark安装目录/work/目录下。可以通过参数SPARK_WORKER_DIR修改。

spark不同模式下应用程序运行的日志存放位置_第1张图片

如图,你看到的就是我的应用程序输出目录。

(2) 为什么应用程序的日志输出没了呢?
  在网上查了一下yarn模式的一些日志配置参数,找到参数

这里写图片描述
可能看的不是很清楚。就是yarn.nodemanager.log.retain-seconds参数,这个参数指的是应用程序输出日志保存的时间,默认是10800,单位是s,也就是3个小时。这个参数在没有开启日志聚合的时候有效。

(3)什么是日志聚合呢?
  yarn资源管理器模式提供了日志聚合功能,通过参数yarn.log-aggregation-enable来开启,这个参数默认是false。如果开启了,你可以在yarn模式下在命令行中使用yarn logs -applicationId 来查看你的应用程序的运行日志。但必须保证,1.开启了该功能 2.程序必须运行完 因为yarn要进行聚合。另外,如果开启了日志聚合,本地的日志文件就会删除,从而腾出更多空间。

  yarn的很多参数都有默认值,如果不了解的话,就会发生类似的情况。还是应该多多熟悉运行模式下的配置参数。不过,spark的官网 spark on yarn那里没有提供这么多详细的参数,大家可以去hadoop的官网查看。

你可能感兴趣的:(Spark)