【问题标题】:Pyspark Job last few tasks hangPyspark Job 最后几个任务挂起
【发布时间】:2017-11-06 15:15:28
【问题描述】:

您好,我在 pyspark 作业中遇到了一个奇怪的问题,无法弄清楚发生了什么。 基本上我有从数据帧转换的RDD。然后我使用 pipe() 调用外部命令来逐个处理 RDD 中的元素。 一切都很好,直到最后只有 4 个任务将继续运行并且永远不会完成。 当我检查执行程序日志时,似乎所有记录都已处理,但由于某种原因任务没有退出。

只是想知道是否有人有任何线索?

【问题讨论】:

  • 忘了说我用的是 python3.4 和 spark 2.1
  • 我遇到了同样的问题,这个askUbuntu issue 描述了同样的问题。 @seiya:你有什么发现吗?
  • 实际上,在我们修复了外部程序中错误输出大量消息的问题后,问题就消失了。我们怀疑这与火花管缓冲区的大小有关,但我们再次缺乏证据。从 spark 作业日志中找不到任何有用的信息。奇怪。

标签: apache-spark pyspark


【解决方案1】:

我遇到了同样的问题,它看起来像一个死锁。执行程序的线程处于 WAITING 状态,如线程转储所示: 并且作业的任务时间是 0ms(意味着它甚至还没有开始!):

同时驱动进程认为执行器正在积极运行并等待其结果: 可以通过终止整个作业并检查日志来检查最后一部分。对我来说,在mapPartitions(...) 说了一些关于getResults 的事情之后,杀死工作总是打断.toDF()

实际上,seiya 用他/她的评论启发了我想出一个想法。一个完整的缓冲区可能是这种行为的解释,因此我增加了与缓冲区相关的 Spark 设置的值,即spark.shuffle.file.buffer=256kspark.kryoserializer.buffer.max=256m,这是它们默认值的四倍。自从我更改了这些设置后,这个问题已经有一段时间没有出现了。

【讨论】:

    猜你喜欢
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多