簡體   English   中英

如何找到跳過的火花工作

[英]How to find skipped spark job

我有一個 Spark 作業,每 10 分鍾運行一次,需要 5 分鍾才能完成。假設在任何外部條件下,這項作業需要 15 分鍾,那么下一個作業將被跳過。是否有任何機制可以找到跳過哪些小時的作業。 對於 Exa。 工作從 9.30 開始,需要 15 分鍾才能完成,然后 9.40 工作將被跳過,9.50 工作將開始等等。如何發現我們在 9.40 錯過了工作。

我會首先嘗試更改作業的調度方式,以便提交作業的工具首先檢查正在運行的作業,然后記錄它由於已經運行的作業而跳過提交。 但是,這些是其他一些選擇。

選項 1 - 歷史服務器

這是最簡單、最直接的選擇。 Spark History Server 提供了一個 UI,它為您提供所有應用程序(運行),它們何時開始,如果尚未運行,何時完成或失敗。 請參閱 Spark 關於Monitoring的文檔。

有關設置歷史服務器的簡短摘要: https://luminousmen.com/post/spark-history-server-and-monitoring-jobs-performance

選項 2 - 查詢時間線服務器 (YARN)

請參閱https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/TimelineServer.html

選項 3 - 解析日志

如評論之一所述,您可以搜索您的日志。 如果您已經集成了諸如 logstash 之類的工具,則這是最簡單的。

如果沒有啟用此類工具,您可以嘗試一種更簡單的方法,即從集群上的調度程序中使用日志記錄。 如果尚未啟用日志聚合,請啟用它。 如何執行此操作取決於您是使用 YARN、Mesos 還是其他一些選項來運行 Spark。 例如,如果您使用 YARN 並且它被配置為日志聚合,您可以使用yarn application -list -appStates ALL查看所有提交的應用程序 ID 及其狀態,並使用yarn logs <application_id>收集應用程序的日志。 然后,您可以利用日志中的時間戳和其他信息(假設 log4j.properties 等配置文件正確)。

選項 4 - 在驅動程序中記錄經過的時間

如果以上都不是一個選項(歷史服務器沒有設置並且你沒有訪問權限,作業不在同一個集群上運行,或者其他一些原因),你可以記錄val start = System.currentTimeMillis在開始您的程序,然后使用val elapsedMin = (System.currentTimeMillis - start) / 60000在最后計算經過的分鍾數。 然后您可以記錄經過的分鍾數,和/或在elapsedMin >= 15時發送消息。 您可能需要考慮應用程序未按時啟動。 但是,這種方法不太可靠,因為它不考慮長時間運行的作業失敗。 我不會單獨使用這種方法。

暫無
暫無

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

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