我们在Spark 2.1中有一个流式传输作业,从Azure EventHub(spark-streaming-eventhubs_2.11:2.0.5)读取,批处理间隔为5秒。 我们看到平均处理时间约为3秒。但是我们看到批次之间的时间间隔大约是20秒。以下日志显示批次的结束/开始。这导致整体处理落后。处理过程中没有错误。
任何可能导致调度延迟的想法? YarnUI将平均延迟显示为0。不确定为什么批次之间的时间间隔会延迟。
17/07/21 23:38:06 WARN root: !!!!!!!! Posted Batch count : 420 Time : 224800
17/07/21 23:38:06 WARN root: ----End of batch--------
17/07/21 23:38:25 WARN root: ----Start of batch--------
17/07/21 23:38:26 WARN root: df.rdd.partitions.size=50
17/07/21 23:38:26 WARN root: blockData.rdd.partitions.size=50
17/07/21 23:38:26 WARN root: finalData.rdd.partitions.size=50
[Stage 2590:=================================================> (9 + 1) / 10]
17/07/21 23:38:28 WARN root: !!!!!!!! Posted Batch count : 256 Time : 224805
17/07/21 23:38:28 WARN root: ----End of batch--------
17/07/21 23:38:47 WARN root: ----Start of batch--------
17/07/21 23:38:48 WARN root: df.rdd.partitions.size=50
17/07/21 23:38:48 WARN root: blockData.rdd.partitions.size=50
17/07/21 23:38:48 WARN root: finalData.rdd.partitions.size=50
简化的repro代码是:
eventHubDStream.foreachRDD((rdd: RDD[Array[Byte]], time: Time) => {
val strRDD = rdd.map(w => new String(w))
val df = spark.read.schema(schema).json(rdd)
df.createOrReplaceTempView("table")
val filteredDf = spark.sql("SELECT * FROM table WHERE EventName='Start')
val count = filteredDf.count()
}