我有一个Spark Streaming应用程序,该应用程序使用来自多个Kafka主题的数据,清理数据并将其推送到多个Kafka主题(具有12个分区)和HBase。批处理间隔为1秒。正在为每个Kafka主题创建一个Dstream,然后将其合并以形成一个Dstream。无需执行复杂的操作或汇总,所有逻辑都涉及DStream上的一堆maps
和最后一个foreachRDD
来触发action
。
我的问题是,在大约300批处理之后,Spark Master暂停了,并且在几分钟内没有安排任何作业。基本上,不是每隔1秒钟(批处理间隔)就调度作业,Spark只需几分钟就可以为每批调度作业。即使刷新几次,也不会在Spark UI中显示任何新作业。
乍一看,我认为Spark UI可能不会以如此之高的速度进行更新,但是观察下游系统可以确认Spark作业尚未执行。在每个排定的批次中,所有任务和阶段均在1秒的批次间隔内完成,并且没有任何排队。
Spark版本-2.2.0
Clustermanager-Spark独立版
节点-3个节点,每个节点具有16个物理核心和128 GB RAM
工作者-每个节点上有4个工作者,每个工作者具有3个内核和5 GB RAM
与3个代理在同一环境中运行
Kafka版本-0.10.0
主题数-6
复制因子-3
分区-每个主题1个(以保持spark中的处理顺序)
如果有人可以阐明这是Spark 2.2的问题,那将是很棒的,因为相同的代码可以正常工作,而在spark 1.6.2集群中没有任何调度延迟。