簡體   English   中英

Spark執行期間的運行時應用程序日志記錄

[英]Run time Application Logging during spark execution

我有一個使用Scala語言為Spark編寫的應用程序。 我的應用程序代碼已經准備就緒,作業運行大約10-15分鍾。

當在運行時執行spark作業時,還需要提供應用程序執行狀態。 我知道spark以惰性方式運行,並且在spark執行期間將數據取回驅動程序是不好的。 通常,我會對定期提供狀態感興趣。

例如。 如果在spark應用程序中配置了20個功能點,那么我想提供這些功能點中每個功能點的狀態,以及它們在Spark執行期間何時執行/或步驟結束。

然后,這些功能點的輸入狀態將被帶到一些自定義的用戶界面,以顯示作業的狀態。

有人可以給我一些如何實現這一目標的指示。

我可以想到的是,在這方面您可以做的事情很少。

如果您的作業包含多個動作,則可以編寫腳本以輪詢那些動作的預期輸出。 例如,假設您的腳本有4個不同的DataFrame保存調用。 您可以讓狀態腳本輪詢HDFS / S3,以查看數據是否已顯示在預期的輸出位置。 另一個示例,我使用Spark索引到ElasticSearch ,並且編寫了狀態日志以輪詢索引中有多少記錄以打印定期進度。

我之前嘗試過的另一件事是使用Accumulators來大致跟蹤進度以及已寫入的數據量。 這樣做行得通,但是當Spark用執行者提供的信息更新可見總數時,這有點武斷,因此我發現它通常對於此目的沒有太大幫助。

您可以采取的另一種方法是直接輪詢Spark的狀態和指標API。 您將能夠將支持Spark UI的所有信息提取到代碼中,並根據需要進行處理。 它不一定會告訴您驅動程序代碼中的確切位置,但是如果您手動確定驅動程序如何映射到階段,則可以知道。 作為參考,以下是有關輪詢狀態API的文檔:

https://spark.apache.org/docs/latest/monitoring.html#rest-api

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM