首页 > 解决方案 > log4j 集群模式的日志在哪里写?

问题描述

用途 - 将自定义日志从流应用程序存储到 HDFS 或 UNIX 目录以用于流应用程序

我在集群模式下运行火花流程序。但是日志没有被写入给定的日志路径。检查了 HDFS 和本地目录。通过 log4j 调试属性,我可以看到正在运行的文件。我错过了什么吗?

--files log4j_driver.properties
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=log4j_driver.properties -Dlog4j.debug=true "
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=log4j_driver.properties - Dlog4j.debug=true"

Log4j-属性文件

我的 Log4j 属性文件 -

日志=/tmp/cc

log4j.rootLogger=INFO,滚动
log4j.appender.rolling=org.apache.log4j.RollingFileAppender
log4j.appender.rolling.File=${log}/abc.log
log4j.appender.rolling.layout=org.apache.log4j。 PatternLayout
log4j.appender.rolling.layout.conversionPattern=[%d] %p %m (%c)%n
log4j.appender.rolling.maxFileSize=2KB
log4j.appender.rolling.maxBackupIndex=10
log4j.appender.rolling.encoding =UTF-8
log4j.logger.org.apache.spark=INFO
log4j.appender.rolling.ImmediateFlush=true
log4j.appender.rolling.Threshold=debug
log4j.appender.rolling.Append=true
log4j.logger.org.eclipse。码头=信息

集群驱动程序日志

log4j:将文件 /tmp/cc/abc.log.2 重命名为 /tmp/cc/abc.log.3
log4j:将文件 /tmp/cc/abc.log.1 重命名为 /tmp/cc/abc.log.2
log4j:将文件 /tmp/cc/abc.log 重命名为 /tmp/cc/abc.log.1
log4j:setFile 调用:/tmp/cc/abc.log,false
log4j:setFile 结束
log4j:滚动计数 = 5141
log4j : maxBackupIndex=10
log4j: 将文件 /tmp/cc/abc.log.9 重命名为 /tmp/cc/abc.log.10
log4j: 将文件 /tmp/cc/abc.log.8 重命名为 /tmp/cc/abc .log.9
log4j:将文件 /tmp/cc/abc.log.7 重命名为 /tmp/cc/abc.log.8
log4j:将文件 /tmp/cc/abc.log.6 重命名为 /tmp/cc/abc .log.7

我读到 - 我们可以在 log4j 中指定 - ${spark.yarn.app.container.log.dir}/app.log 但不确定此属性的默认路径是什么,或者我们是否还需要手动设置。当我在客户端模式下运行此应用程序时 - 日志完美地记录到本地目录。

标签: apache-sparklog4jspark-streaminghadoop-yarn

解决方案


当您在集群模式 ( --deploy-mode cluster) 中启动 Spark 应用程序时,log=/tmp/cc指向/tmp/cc它位于运行驱动程序和执行程序的“容器”的根目录下。它们将位于集群中的机器上。

在您的情况下,您必须找到运行驱动程序和执行程序的机器并找到目录。

由于像 Spark 一样在分布式环境中管理日志非常麻烦,Spark 支持的集群管理器(即 Hadoop YARN、Apache Mesos、Kubernetes)允许从机器收集日志并通过 Web UI 或命令行提供去下载。在 YARN 中,它是yarn logs -applicationId


推荐阅读