YARN执行程序日志上的Spark流不可用

时间:2015-06-19 07:13:49

标签: logging apache-spark yarn spark-streaming

我正在运行以下代码

.map{x => 
    Logger.fatal("Hello World")
    x._2
 }

这是火花流媒体应用程序在YARN上运行。我提升了log4j并为其提供了spark-submit(使用--files)。我的Log4j配置已加载,我从日志中看到并应用于驱动程序的日志(我只看到我的日志级别和日志中的模式),但执行程序的日志不可用。我在日志中找不到“Hello Word”。另外,我检查了$ {yarn.nodemanager.log-dirs},它是空的,看起来很奇怪。我的日志在哪里?

提前谢谢

2 个答案:

答案 0 :(得分:1)

根据官方 Spark 文档(link), YARN 管理日志记录有两种方式:

  • 如果启用了日志聚合(使用yarn.log-aggregation-enable config):

从本地计算机(执行程序)中删除容器日志,并将其复制到 HDFS 目录。可以使用yarn logs命令从群集中的任何位置查看这些日志,方式如下:

yarn logs -applicationId <app ID>
  • 如果日志聚合,则

日志在YARN_APP_LOGS_DIR下的每台计算机上进行本地维护,通常配置为/tmp/logs$HADOOP_HOME/logs/userlogs,具体取决于 Hadoop 版本和安装。根据文档,查看容器的日志需要转到包含它们的主机并查看此目录。

答案 1 :(得分:1)

我找到了解决方案,在申请提交期间必须按以下方式设置正确的log4j配置:

--files /opt/spark/conf/log4j.properties
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=log4j.properties"
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=log4j.properties"

,其中

spark.driver.extraJavaOptions   -> sets up log configuration for driver
spark.executor.extraJavaOptions -> sets up log configuration for executor(s)