更新时间:2024-11-29 GMT+08:00
Spark Streaming任务一直阻塞
问题
运行一个Spark Streaming任务,确认有数据输入后,发现没有任何处理的结果。打开Web界面查看Spark Job执行情况,发现如下图所示:有两个Job一直在等待运行,但一直无法成功运行。
继续查看已经完成的Job,发现也只有两个,说明Spark Streaming都没有触发数据计算的任务(Spark Streaming默认有两个尝试运行的Job,就是图中两个)
图2 Completed Jobs
回答
经过定位发现,导致这个问题的原因是:Spark Streaming的计算核数少于Receiver的个数,导致部分Receiver启动以后,系统已经没有资源去运行计算任务,导致第一个任务一直在等待,后续任务一直在排队。从现象上看,就是如问题中的图1中所示,会有两个任务一直在等待。
因此,当Web出现两个任务一直在等待的情况,首先检查Spark的核数是否大于Receiver的个数。
Receiver在Spark Streaming中是一个常驻的Spark Job,Receiver对于Spark是一个普通的任务,但它的生命周期和Spark Streaming任务相同,并且占用一个核的计算资源。
在调试和测试等经常使用默认配置的场景下,要时刻注意核数与Receiver个数的关系。
父主题: Spark Streaming