Spark Shuffle FetchFailedException錯誤導致作業失敗

禁用默認的Spark Shuffle服務來處理FetchFailedException錯誤。

寫的shanmugavel.chandrakasu

最後發布日期:2022年12月5日

問題

如果應用程序包含任何聚合或連接階段,則執行將需要Spark Shuffle階段。根據所使用的特定配置,如果您在交互式集群上運行多個流查詢,您可能會得到shuffleFetchFailedException錯誤。

ShuffleMapStage未能最大允許的次數DAGScheduler: ShuffleMapStage 499453(從command-39573728:13)失敗468.820年代org.apache.spark.shuffle.MetadataFetchFailedException:失蹤一個輸出位置洗牌228703 org.apache.spark.shuffle.FetchFailedException:連接重置通過對等org.apache.spark.storage.ShuffleBlockFetcherIterator.throwFetchFailedException (ShuffleBlockFetcherIterator.scala: 747)造成的:java.io.IOException:連接被對等體重置

導致

Shuffle獲取失敗通常發生在集群降級事件、執行器丟失或worker退役等場景中。在某些情況下,來自執行程序的shuffle文件會丟失。當後續任務試圖獲取shuffle文件時,它失敗了。

“數據庫”默認開啟shuffle服務。該服務啟用了一個外部shuffle服務,該服務保存由執行程序編寫的shuffle文件,以便可以安全地刪除執行程序。

運行spark.conf.get(“spark.shuffle.service.enabled”)在Python或Scala筆記本單元中返回shuffle服務的當前值。如果它返回真正的已啟用服務。

spark.conf.get(“spark.shuffle.service.enabled”)

解決方案

關閉默認的Spark Shuffle服務。

禁用shuffle服務並不會阻止shuffle,它隻是改變了執行shuffle的方式。當服務被禁用時,shuffle由執行程序執行。

您可以通過添加禁用shuffle服務spark.shuffle.service.enabled假到集群的火花配置AWS|Azure|GCP)。

spark.shuffle.service.enabled假

更新後重新啟動集群火花配置

刪除

信息

禁用shuffle服務對性能有輕微影響。


這篇文章有用嗎?