理解投機執行

學習投機執行是如何工作的,如何識別它,當你應該使用它。

寫的mounika.tarigopula

去年發表在:11月7日,2022年

投機執行

投機執行可用於自動re-attempt任務不是進步相比其他任務在同一階段。

這意味著如果一個或多個任務正在運行慢的階段,他們會換。完成的任務首先是標記為成功。其他的嚐試被殺害。

實現

當一個工作掛間歇性地和一個或多個任務掛,使投機執行往往是解決問題的第一步。由於投機執行,這不是進步緩慢掛任務是re-attempted在另一個節點。

這意味著如果一個或多個任務正在運行慢的階段,任務是重新推出。在成功完成重新啟動任務,最初的任務是標記為失敗。如果重新推出前的原始任務完成任務,原任務的嚐試被標記為成功,重新開辦的任務是殺死。

除了投機執行,有一些額外的設置,可以根據需要調整。投機執行隻應在必要時啟用。

下麵是投機的主要配置選項執行。

配置
描述
磚違約
OSS違約
spark.speculation
如果設置為真正的,執行投機執行的任務。這意味著如果一個或多個任務正在運行緩慢的階段,他們會換。
spark.speculation.interval
經常引發如何檢查任務來推測。
100毫秒
100毫秒
spark.speculation.multiplier
多少次慢的任務比中值被認為是投機。
3
1.5
spark.speculation.quantile
的任務必須完成之前猜測啟用特定階段
0.9
0.75

如何解釋數據磚默認值嗎

如果啟用了投機執行(spark.speculation),然後每100毫秒(spark.speculation.intervalApache火花),檢查緩慢運行的任務。一個任務被標記為緩慢運行的任務如果是運行超過三倍的時間(spark.speculation.multiplier)的平均執行時間完成任務。火花等到90% (spark.speculation.quantile)已經完成的任務開始前投機執行。

識別投機執行行動

  • 查看任務嚐試在UI的火花。如果投機執行運行時,你看到的一個任務狀態作為成功和其他任務狀態TaskKilled
  • 投機執行不會總是開始,即使有緩慢的任務。這是因為投機執行之前必須滿足的標準開始運行。這通常發生在用少量的任務階段,隻有一個或兩個任務卡住了。如果spark.speculation.quantile不滿足,投機執行不開始。

當啟用投機執行

  • 投機時可以用於疏通火花應用程序執行一些任務運行超過預期,原因是不確定的。一旦確定了根本原因,你應該解決潛在問題和禁用投機執行。
  • 投機執行確保推測任務不安排在同一原始任務執行人。這意味著問題很容易造成一個壞VM實例通過使投機執行。

當不運行投機執行

  • 投機執行不應使用很長一段時間在生產工作很長一段時間。擴展使用可能導致失敗的任務。
  • 如果操作中執行任務不是冪等,投機執行不應啟用。
  • 如果你有數據傾斜,可以推測任務隻要原始任務,保留最初的任務成功和推測死亡。投機執行並不保證推測任務先完成。
  • 使投機執行隻能影響性能,所以它應該被用於故障診斷。如果您需要投機執行完成您的工作負載,打開一個磚的支持請求。磚的支持可以幫助確定任務緩慢的根源。


這篇文章有用嗎?