問題
如果應用程序包含任何聚合或連接階段,則執行將需要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假
更新後重新啟動集群火花配置.