簡體   English   中英

Spark UI 執行器

[英]Spark UI Executor

在 Spark UI 中,添加了 18 個執行器,刪除了 6 個執行器。 當我檢查 executor 選項卡時,我看到了許多死亡和排除的 executor。 目前,在 EMR 中使用動態分配。

我查閱了一些關於已故執行人的帖子,但這些帖子大多與工作失敗有關。 就我而言,似乎工作本身並沒有失敗,但可以看到死亡和被排除的執行者。

這些“死亡”和“排除”的執行者是什么? 它如何影響當前 Spark 集群配置的性能? (如果它影響性能)那么提高性能的好方法是什么?

啟用動態分配后,spark 正在嘗試將執行者的數量調整為活動階段中的任務數量。 讓我們看一下這個例子:

  1. 工作開始,第一階段是從大量來源中讀取的,這需要一些時間。 假設這個源是分區的,Spark 生成了 100 個任務來獲取數據。 如果您的執行器有 5 個核心,Spark 將生成 20 個執行器以確保最佳並行性(20 個執行器 x 5 個核心 = 100 個並行任務)

  2. 可以說,在下一步中,您正在進行重新分區或合並連接,將隨機分區設置為 200 spark 將生成 200 個任務。 他很聰明地發現他目前只有 100 個可用內核,因此如果有新資源可用,他將嘗試生成另外 20 個執行器(40 個執行器 x 5 個內核 = 200 個並行任務)

  3. 現在連接完成了,在下一階段你只有 50 個分區,要並行計算,你不需要 40 個執行器,10 個就可以(10 個執行器 x 5 個核心 = 50 個並行任務)。 現在,如果進程花費了足夠的時間,Spark 可以釋放一些資源,您將看到已刪除的執行程序。

  4. 現在我們有涉及重新分區的下一階段。 分區數等於 200。使用 10 個執行器,您只能並行處理 50 個分區。 Spark 將嘗試獲得新的執行者......

您可以閱讀這篇博文: https://aws.amazon.com/blogs/big-data/best-practices-for-successfully-managing-memory-for-apache-spark-applications-on-amazon-emr/

spark.dynamicAllocation.enabled 屬性的問題在於它需要您設置子屬性。 一些示例子屬性是 spark.dynamicAllocation.initialExecutors、minExecutors 和 maxExecutors。 大多數情況下需要子屬性才能在集群中為應用程序使用正確數量的執行程序,尤其是當您需要同時運行多個應用程序時。 設置子屬性需要大量的試驗和錯誤才能獲得正確的數字。 如果它們不正確,則可能會保留容量但從未實際使用過。 這會導致資源浪費或其他應用程序出現 memory 錯誤。

在這里你會發現一些提示,根據我的經驗,如果你要在同一個集群中並行運行幾個作業,那么設置 maxExecutors 是值得的,因為大多數時候為了獲得 100% 的效率而餓死其他作業是不值得的一份工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM