【问题标题】:Spark never finishes jobs and stages, JobProgressListener crashSpark 永远不会完成作业和阶段,Jobs ProgressListener 崩溃
【发布时间】:2017-05-24 21:04:26
【问题描述】:

我们有一个 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

从此开始,应用程序的性能直线下降,大部分 Stages 和 Jobs 永远不会完成。在 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 处理),但事实并非如此。我们的集群有点小,唯一的特殊性是我们倾向于混合处理大小文件,而小文件会生成许多快速完成的任务。

【问题讨论】:

  • 找到原因了吗?

标签: apache-spark


【解决方案1】:

我可能找到了解决方法:

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

【讨论】:

  • Spark 1.4.1 在这里。增加此设置似乎会延迟此错误的发生。 :)
  • 重新分区到更小的数字,可以避免这个错误,在使用base df/rdd之前,做base_df.coalesce()。
猜你喜欢
  • 2021-10-08
  • 2018-07-08
  • 1970-01-01
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多