【问题标题】:Get Full Stack Trace in Spark Log在 Spark 日志中获取完整的堆栈跟踪
【发布时间】:2017-08-09 02:50:06
【问题描述】:

我想在我的 spark 执行器日志中查看完整的堆栈跟踪。

例如:

原因:java.lang.RuntimeException:java.lang.Long 不是 int 模式的有效外部类型 在 org.apache.spark.sql.catalyst.expressions.GeneratedClass$SpecificUnsafeProjection.apply_0$(generated.java:434) 在 org.apache.spark.sql.catalyst.expressions.GeneratedClass$SpecificUnsafeProjection.apply(generated.java:737) 在 org.apache.spark.sql.catalyst.encoders.ExpressionEncoder.toRow(ExpressionEncoder.scala:290) ... 18 更多

我想看看还有 18 个缺失的。我曾尝试更改日志级别等,但没有帮助。

【问题讨论】:

  • 您使用的是 Spark 用户界面吗?
  • 我正在查看我正在工作的 spark 文件夹中的日志,但我认为它与 UI 中的 stderr 和 stdout 相同。
  • 我认为,当您在堆栈跟踪中看到 )... x more 时,这意味着这些调用已经在其他地方被覆盖(在由或顶级执行中)。由于惰性评估,Spark 堆栈跟踪通常不是最有用的。
  • 是的,我确实看到了其他堆栈跟踪,它们似乎是以下堆栈跟踪的一部分。无论如何,我都发现了上面的错误。原来声明地图然后执行 map.values.toList 不会保留声明地图的顺序。谢谢您的帮助。

标签: scala apache-spark


【解决方案1】:

解决方案 1. 在你的 spark install 文件夹中,有一个 conf 文件夹包含 log4j.properties 文件,你可以将该文件配置为日志级别。

Spark 默认使用 INFO,购买时可以改为 DEBUG 或 TRACE 来获取所有 spark 日志。 配置模板: https://github.com/apache/spark/blob/master/conf/log4j.properties.template

Level 的其他选项包括:all、debug、error、fatal、info、off、trace、trace_int、warn

解决方案 2. 将这些记录器放入 SparkContext() 函数中

import org.apache.log4j.Logger; 
import org.apache.log4j.Level;

Logger.getLogger("org").setLevel(Level.INFO); 
Logger.getLogger("akka").setLevel(Level.INFO);

level.Info 可以更改为 DEBUG OR TRACE 等。

【讨论】:

    猜你喜欢
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多