如何通過rest api獲取以cluster模式運行於yarn上的spark streaming程序的流統計信息


在apache spark的官方文檔中,https://spark.apache.org/docs/latest/monitoring.html#rest-api,列舉了spark程序的rest入口是 http://localhost:4040/api/v1.

當spark程序跑在yarn上的時候,類似 localhost:4040這種地址實際上被yarn的resource manager代理了,所以入口地址通常是 http://<active-rm-address>:8088/proxy/application_<id>/api/v1,其中active-rm-address即處於active狀態的resource manager的主機名。那么根據上面spark的monitoring.html文檔中給出的rest api路徑,比如查找streaming程序的統計量,那么可以附加 /applications/<application-id>/streaming/statistics,拼接成url。

application-id可以通過yarn application -list 命令查看,或者yarn的resource manager的web ui頁面查看。

示例:

GET請求: http://<active-rm-address>:8088/proxy/application_1591086111954_6422/api/v1/applications/application_1591086111954_6422/streaming/statistics  (curl <url>即可對url請求GET)。

返回結果如下所示:

{
    "startTime": "2020-09-05T20:00:43.722GMT",
    "batchDuration": 3000,
    "numReceivers": 1,
    "numActiveReceivers": 1,
    "numInactiveReceivers": 0,
    "numTotalCompletedBatches": 102909,
    "numRetainedCompletedBatches": 1000,
    "numActiveBatches": 1,
    "numProcessedRecords": 35581455,
    "numReceivedRecords": 35581802,
    "avgInputRate": 113.99567099567113,
    "avgSchedulingDelay": 114,
    "avgProcessingTime": 2436,
    "avgTotalDelay": 2551
}

 

需要注意的是,雖然通過yarn的web ui界面查看spark streaming程序的信息,進入application manager頁面的時候,都有Streaming這個Tab,但是對於 /applications/<app-id>/streaming/statistics 這個接口地址,好像在spark 2.1.0的時候還沒有,從spark 2.2.0開始就有了(挑幾個版本大致看了下各版本文檔中關於monitoring的描述,不一定准確)。

改進

  更直接的方法,通過yarn application -list 命令搞定即可。我們知道,該命令的輸出內容是若干列:
                Application-Id      Application-Name        Application-Type          User           Queue                   State             Final-State             Progress                        Tracking-URL
第一列我們可以獲得Application-Id, 最后一列我們可以獲得 Tracking-URL。這個Tracking-URL實際上是一個跳轉地址,在瀏覽器中輸入該地址訪問,會跳轉為
http://<active-rm-address>:8088/proxy/redirect/application_1591086111954_6422 類似的地址,而這個地址和 http://<active-rm-address>:8088/proxy/application_1591086111954_6422 (注意url中/proxy后面沒有redirect了)是一樣的,
所以可以直接使用Tracking-URL這列的地址組合 /api/v1/<application-id>/streaming/statistics 之類的路徑,構成GET請求的目標url。這樣避免確定active-rm-address的過程(尤其是對於做了rm ha的集群而言)——其實后來也發現即使做了rm ha的集群,使用處於standby狀態的rm的地址放在上面的url,也是可以的,會自動跳轉到active狀態的rm的地址。當然了,使用Tracking-URL還是最簡單的,根本不需要預先知道rm的地址。對於這種使用跳轉的地址方法,curl 命令需要加 -L 參數,否則返回的是包含跳轉后地址的網頁。

提醒

  targeturl中,如果把api/v1改成app/v1,好像也是能訪問的,不過返回的是網頁,不是json數據。我是手誤碰到這種情況,讓我迷惑了很久。

 

 

參考:"How to get Spark Metrics as JSON using Spark REST API in YARN Cluster mode"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM