Apache Spark UI與作業不同步

當事件在處理之前從事件隊列中掉落時,Spark作業的狀態會與Spark UI不同步。

寫的chetan.kardekar

最後發布時間:2022年7月8日

問題

在Spark UI中無法正確顯示Spark作業的狀態(AWS|Azure|GCP).在Spark界麵中,一些被確認為“完成”狀態的作業顯示為“活動/運行中”。在某些情況下,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: Dropped 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的值。

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