我们有一个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
Run Code Online (Sandbox Code Playgroud)
从那开始,应用程序的性能直线下降,大多数阶段和工作从未完成.在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
Run Code Online (Sandbox Code Playgroud)
这是一个非常烦人的问题,因为它不是一个明确的崩溃,或者我们可以抓住重新启动应用程序的清除错误消息.
更新:
最让我感到困扰的是,我希望在大型配置上发生这种情况(一个大型集群会让DDOS驱动程序的任务结果更容易),但实际情况并非如此.我们的集群很小,唯一的特点是我们倾向于混合使用小文件和大文件来处理,而小文件生成许多快速完成的任务.
我可能找到了解决方法:
更改值spark.scheduler.listenerbus.eventqueue.size(100000 而不是默认的 10000)似乎有帮助,但它可能只会推迟问题的发生。
| 归档时间: |
|
| 查看次数: |
2249 次 |
| 最近记录: |