Spark永远不会完成作业和阶段,JobProgressListener会崩溃

时间:2016-12-14 21:12:45

标签: apache-spark

我们有一个Spark应用程序,可以持续处理大量传入的作业。在多个线程上并行处理多个作业。

在密集型工作负载期间,我们会在某些时候开始出现这种警告:

16/12/14 21:04:03 WARN JobProgressListener: Task end for unknown stage 147379
16/12/14 21:04:03 WARN JobProgressListener: Job completed for unknown job 64610
16/12/14 21:04:04 WARN JobProgressListener: Task start for unknown stage 147405
16/12/14 21:04:04 WARN JobProgressListener: Task end for unknown stage 147406
16/12/14 21:04:04 WARN JobProgressListener: Job completed for unknown job 64622

从那开始,应用程序的性能直线下降,大多数阶段和工作都没有完成。在SparkUI上,我可以看到13000个挂起/活动作业等数据。

我无法清楚地看到更多信息之前发生的另一个异常。也许是这个,但它涉及另一个听众:

16/12/14 21:03:54 ERROR LiveListenerBus: Dropping SparkListenerEvent because no remaining room in event queue. This likely means one of the SparkListeners is too slow and cannot keep up with the rate at which tasks are being started by the scheduler.
16/12/14 21:03:54 WARN LiveListenerBus: Dropped 1 SparkListenerEvents since Thu Jan 01 01:00:00 CET 1970

这是一个非常恼人的问题,因为它不是一个明确的崩溃,或者我们可以抓住重新启动应用程序的清除错误消息。

更新

  • Spark 2.0.2和Spark 2.1.1
  • 出现问题
  • 最有可能与SPARK-18838
  • 相关

最让我感到烦恼的是,我希望在大型配置上发生这种情况(大型群集会使DDOS驱动程序更容易获得任务结果),但实际情况并非如此。我们的集群很小,唯一的特点是我们倾向于混合使用小文件和大文件来处理,而小文件会生成许多快速完成的任务。

1 个答案:

答案 0 :(得分:2)

我可能找到了解决方法:

更改spark.scheduler.listenerbus.eventqueue.size(100000而不是默认值10000)的值似乎有所帮助,但它可能只会推迟问题。