Apache Spark UI與作業不同步

事件未處理時,從事件隊列中掉出,導致Spark作業狀態與Spark UI不同步。

寫的chetan.kardekar

最後發布時間:2023年2月27日

問題

Spark作業的狀態沒有在Spark UI中正確顯示(AWS|Azure|GCP).一些被確認為“完成”狀態的作業在Spark UI中顯示為“活動/運行中”。在某些情況下,Spark UI可能出現空白。

當您查看驅動程序日誌時,您會看到一個AsyncEventQueue警告。

日誌===== 20/12/23 21:20:26 WARN AsyncEventQueue: Dropped 93909 events from shared since Wed Dec 23 21:19:26 UTC 2020。20/12/23 21:21:26 WARN AsyncEventQueue: Dropped 52354 events from shared since Wed Dec 23 21:20:26 UTC 2020。20/12/23 21:22:26 WARN AsyncEventQueue: Dropped 94137 events from shared since Wed Dec 23 21:21:26 UTC 2020。20/12/23 21:23:26 WARN AsyncEventQueue: Dropped 44245 events from shared since Wed Dec 23 21:22:26 UTC 2020。20/12/23 21:24:26 WARN AsyncEventQueue: drop 126763 events from shared since Wed Dec 23 21:23:26 UTC 2020。20/12/23 21:25:26 WARN AsyncEventQueue: Dropped 94156 events from shared since Wed Dec 23 21:24:26 UTC 2020。

導致

  • 所有Spark作業、階段和任務都被推送到事件隊列。
  • 後端監聽器從隊列中讀取Spark UI事件並渲染Spark UI。
  • 事件隊列的默認容量(spark.scheduler.listenerbus.eventqueue.capacity)為20000。

如果推送到事件隊列的事件多於後端偵聽器可以使用的事件,那麼最老的事件將從隊列中刪除,偵聽器永遠不會使用它們。

這些事件會丟失,不會在Spark UI中呈現。

解決方案

設置的值spark.scheduler.listenerbus.eventqueue.capacity在您的集群中火花配置AWS|Azure|GCP)在集群級別設置為大於20000的值。

此值設置應用程序狀態事件隊列的容量,該隊列保存內部應用程序狀態偵聽器的事件。增加這個值可以讓事件隊列容納更多的事件,但可能導致驅動程序使用更多內存。

這篇文章有用嗎?