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