[英]Monitoring Structured Streaming
我有一個運行良好的結構化流設置,但我希望在它運行時監視它。
我已經構建了一個EventCollector
class EventCollector extends StreamingQueryListener{
override def onQueryStarted(event: QueryStartedEvent): Unit = {
println("Start")
}
override def onQueryProgress(event: QueryProgressEvent): Unit = {
println(event.queryStatus.prettyJson)
}
override def onQueryTerminated(event: QueryTerminatedEvent): Unit = {
println("Term")
}
我已經構建了一個EventCollector並將監聽器添加到我的spark會話中
val listener = new EventCollector()
spark.streams.addListener(listener)
然后我解除了查詢
val query = inputDF.writeStream
//.format("console")
.queryName("Stream")
.foreach(writer)
.start()
query.awaitTermination()
但是,onQueryProgress永遠不會被擊中。 onQueryStarted確實如此,但我希望以一定的時間間隔獲取查詢的進度,以監控查詢的執行情況。 任何人都可以協助嗎?
經過對這個主題的大量研究,這就是我發現的......
OnQueryProgress在查詢之間受到影響。 我不確定這是否有意,但是當我們從文件中傳輸數據時,OnQueryProgress不會啟動。
我發現的解決方案是依靠foreach writer接收器並在過程函數中執行我自己的性能分析。 遺憾的是,我們無法訪問有關正在運行的查詢的特定信息。 或者,我還沒想出怎么做。 這是我在沙箱中實現的分析性能的方法:
val writer = new ForeachWriter[rawDataRow] {
def open(partitionId: Long, version: Long):Boolean = {
//We end up here in between files
true
}
def process(value: rawDataRow) = {
counter += 1
if(counter % 1000 == 0) {
val currentTime = System.nanoTime()
val elapsedTime = (currentTime - startTime)/1000000000.0
println(s"Records Written: $counter")
println(s"Time Elapsed: $elapsedTime seconds")
}
}
}
獲取指標的另一種方法:
獲取有關正在運行的查詢的信息的另一種方法是點擊spark為我們提供的GET端點。
要么
這里的文檔: http : //spark.apache.org/docs/latest/monitoring.html
2017年9月2日更新: 測試常規火花流,而非結構化流媒體
免責聲明,這可能不適用於結構化流媒體,我需要設置一個測試床來確認。 但是,它確實適用於常規火花流(在此示例中從Kafka消費)。
我相信,由於Spark streaming 2.2已經發布,新的端點可以檢索更多關於流性能的指標。 這可能已經存在於以前的版本中,我只是錯過了它,但我想確保它是為其他任何搜索此信息的人記錄的。
http:// localhost:4040 / api / v1 / applications / {applicationIdHere} / streaming / statistics
這是看起來像是在2.2中添加的端點(或者它已經存在並且剛剛添加了文檔,我不確定,我還沒有檢查過)。
無論如何,它為指定的流應用程序添加了這種格式的指標:
{
"startTime" : "2017-09-13T14:02:28.883GMT",
"batchDuration" : 1000,
"numReceivers" : 0,
"numActiveReceivers" : 0,
"numInactiveReceivers" : 0,
"numTotalCompletedBatches" : 90379,
"numRetainedCompletedBatches" : 1000,
"numActiveBatches" : 0,
"numProcessedRecords" : 39652167,
"numReceivedRecords" : 39652167,
"avgInputRate" : 771.722,
"avgSchedulingDelay" : 2,
"avgProcessingTime" : 85,
"avgTotalDelay" : 87
}
這使我們能夠使用Spark公開的REST端點構建我們自己的自定義度量/監視應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.