YARN 执行程序日志上的 Spark 流不可用
Spark streaming on YARN executor's logs not available
我是运行下面的代码
.map{x =>
Logger.fatal("Hello World")
x._2
}
它是在 YARN 上运行的 spark 流应用程序。我更新了 log4j 并为它提供了 spark-submit(使用 --files)。我的 Log4j 配置已加载,我从日志中看到并应用于驱动程序的日志(我只看到我的日志级别和我在日志中的模式),但是来自执行程序的日志不可用。我在日志中找不到 "Hello Word"。另外,我检查了 ${yarn.nodemanager.log-dirs} ,它是空的,看起来很奇怪。我的日志在哪里?
提前致谢
根据 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版本和安装。根据文档,查看容器的日志需要转到包含它们的主机并查看此目录。
我找到了解决方案,正确的 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)
我是运行下面的代码
.map{x =>
Logger.fatal("Hello World")
x._2
}
它是在 YARN 上运行的 spark 流应用程序。我更新了 log4j 并为它提供了 spark-submit(使用 --files)。我的 Log4j 配置已加载,我从日志中看到并应用于驱动程序的日志(我只看到我的日志级别和我在日志中的模式),但是来自执行程序的日志不可用。我在日志中找不到 "Hello Word"。另外,我检查了 ${yarn.nodemanager.log-dirs} ,它是空的,看起来很奇怪。我的日志在哪里?
提前致谢
根据 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版本和安装。根据文档,查看容器的日志需要转到包含它们的主机并查看此目录。
我找到了解决方案,正确的 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)