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