1

我刚刚开始使用的 Spark 集群出现了非常奇怪的行为。

日志记录的正常行为是当一个人运行时spark-submit会看到如下日志消息:

INFO 2016-11-04 13:14:10,671 org.apache.spark.executor.Executor: Finished task 227.0 in stage 4.0 (TID 3168). 1992 bytes result sent to driver

这些通常会很快填满控制台,尤其是当应用程序使用大量分区时。

但是在运行 spark-submit 后,我​​没有看到任何来自 Spark 的常见日志消息。也许大约 5 行。相反,所有正常的日志消息都在 Spark UI 的驱动程序标准输出中。

所以问题是什么设置和哪里可能告诉 Spark 不要将这些日志条目返回给驱动程序?

这是相当令人沮丧的,因为当日志消息被拆分到多个位置时,很难调试应用程序。通常我只是在运行 spark-submit 后观看日志涌入我的屏幕,然后我就可以感觉到它在做什么。现在我无法获得那种感觉,因为我必须在事件发生后查看日志。

4

2 回答 2

1

因此,在挖掘了我正在使用的 jar 之后,我发现它是用一个奇怪的 log4j 文件构建的。我不知道它在这个文件中是什么,但是有些东西会阻止日志进入驱动程序。一旦我在没有这个 log4j 文件的情况下重建 jar,日志就可以正常工作!!

# Set everything to be logged to the console
log4j.rootCategory=DEBUG, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n

# Settings to quiet third party logs that are too verbose
log4j.logger.org.spark-project.jetty=WARN
log4j.logger.org.spark-project.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark=WARN
log4j.logger.org.apache.hadoop=INFO
log4j.logger.io.netty=INFO
log4j.logger.com.datastax.cassandra=INFO


# SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive support
log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR
于 2016-11-04T14:51:36.577 回答
0

这个问题现在有点老了,但是对于那些运行 spark YARN 作业的人,您可以使用以下命令查看日志:

yarn logs -applicationId <Your applicationId>

我发现这个命令对于在 YARN 集群模式下调试非常有用。

没有完全回答 OP 的问题,但看看他们是否可以以这种方式查看日志可能会很有趣。

于 2019-08-12T12:27:51.610 回答