我正在运行以下代码
.map{x =>
Logger.fatal("Hello World")
x._2
}
这是火花流媒体应用程序在YARN上运行。我提升了log4j并为其提供了spark-submit(使用--files)。我的Log4j配置已加载,我从日志中看到并应用于驱动程序的日志(我只看到我的日志级别和日志中的模式),但执行程序的日志不可用。我在日志中找不到“Hello Word”。另外,我检查了$ {yarn.nodemanager.log-dirs},它是空的,看起来很奇怪。我的日志在哪里?
提前谢谢
答案 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)