【问题标题】:How to redirect Spark logging stdout to console如何将 Spark 日志记录标准输出重定向到控制台
【发布时间】:2017-10-24 17:23:12
【问题描述】:

当我的 spark 应用程序失败时,它会在控制台中记录一条非常通用的消息。为了查看详细的消息,揭示真正的错误,我必须去 Spark History Server 并查看我的执行程序的 stdout 日志。有谁知道我如何获得更多详细信息以显示在控制台中?我一直在查看一些指向 log4j 属性文件的链接,但查看该文件我认为它已经正确设置:

# Set everything to be logged to the console
log4j.rootCategory=WARN, 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.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
log4j.logger.org.apache.parquet=ERROR
log4j.logger.parquet=ERROR

一些额外的细节:

  • 我正在使用 PySpark
  • 这些是 Spark SQL 产生的错误
  • 我在集群模式下使用 Yarn Master 运行

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql


    【解决方案1】:

    要使log4j.properties 文件按预期工作,需要将以下内容添加到spark-submit(假设log4j.properties 在类路径中):

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

    但最重要的是,您需要确保在yarn client mode 中执行spark-submit,否则您的驱动程序将在集群上的一个节点中启动,您将不会在控制台上看到它的日志。

    要检查在yarn cluster mode 上执行spark-submit 的日志,请使用此(在yarn-site.xml 中需要yarn.log-aggregation-enable=true):

    yarn logs -applicationId <applicationId> 
    

    【讨论】:

    • 这是否意味着如果我在集群模式下运行,则无法将输出路由到控制台?我唯一的选择是运行 yarn logs 语句?
    • 据我所知,这是正确的。在控制台上打印日志看起来更像是一个调试练习,为此目的,运行 spark 应用程序的正确方法是在 yarn 客户端或独立模式下。调试完成后切换回集群模式应该是正确的方法。
    猜你喜欢
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 2021-07-03
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多