显示Spark结构化流作业消耗的事件数

时间:2020-04-14 21:45:57

标签: apache-spark spark-structured-streaming

我有2个线性Spark结构化流媒体作业,可将数据从一个kafka主题复制到另一个。

是否可以发布/查看Spark UI中消耗/产生的事件数?

1 个答案:

答案 0 :(得分:2)

Spark Web UI中的“流选项卡”不适用于结构化流,仅适用于Direct API。从版本3.x开始可用。

但是,还有另一种简便的方法来显示Spark结构化流作业处理的事件数。

您可以使用StreamingQueryListener

import org.apache.spark.sql.streaming.StreamingQueryListener
import org.apache.spark.sql.streaming.StreamingQueryListener.QueryProgressEvent


class CountNumRecordsListener extends StreamingQueryListener {

  override def onQueryStarted(event: StreamingQueryListener.QueryStartedEvent): Unit = { }

  override def onQueryProgress(event: QueryProgressEvent): Unit = {
    println(s"""numInputRows: ${event.progress.numInputRows}""")
  }

  override def onQueryTerminated(event: StreamingQueryListener.QueryTerminatedEvent): Unit = { }
}

然后使用该类,您可以将侦听器添加到流应用程序中(其中spark是您的SparkSession)。

val countNumRecordsListener = new CountNumRecordsListener
spark.streams.addListener(countNumRecordsListener)

StreamingQueryProgress类还提供了更多信息,可帮助您了解流作业的数据处理。