如何解決Spark的ExecutorLost錯誤

2021-10-24 16:56:43 字數 953 閱讀 3860

executorlost錯誤說明:執行task的executor宕掉了。產生該錯誤的原因可能是多方面的。本文分析該錯誤產生的原因,並提出一些解決辦法。

導致該問題的原因可以從兩方面來分析:

(1)由於執行在executor中的task導致的。

(2)也可能是與執行的task無關的原因導致的,比如:人為的把executor殺掉。

進一步分析產生的原因:該問題一般是由於executor端執行的應用的使用記憶體超出了限制。或則是由於executor端的記憶體過小,或則是由於資料量過大而導致的。

若是由於記憶體使用過大而導致的,又分為幾種情況:

(1)由於jvm使用的記憶體超出了container(使用yarn模式)的記憶體限制,導致container崩掉。

(2)由於task執行的運算,比如:groupby等,導致task執行的jvm崩掉。

增加executor端的記憶體大小,可以通過以下引數進行設定:

--executor-memory 5g

--conf spark.yarn.executor.memoryoverhead=1250

--driver-memory 4g

注意:executor.memoryoverhead是executor使用的堆外記憶體的大小,單位是m。遇到executor lost錯誤時要適當的調大這個引數,這樣為yarn的container預留更多的記憶體(executor的堆外記憶體),避免container因為記憶體不足而死掉。

使用比較高效的運算元

a) 使用countby代替groupby

b) 使用reducebykey代替groupbykey

增加並行度,讓並行度的數量是cpu核數量的2~3倍

--conf "spark.default.parallelism=100"
本文介紹了可能產生executorlost的問題,並提出了解決辦法。

Spark的Driver節點和Executor節點

自 1 驅動器節點 driver spark的驅動器是執行開發程式中的 main方法的程序。它負責開發人員編寫的用來建立sparkcontext 建立 rdd,以及進行 rdd 的轉化操作和行動操作 的執行。如果你是用spark shell,那麼當你啟動 spark shell的時候,系統後台自啟了...

如何解決併發

雖然從巨集觀上,處理器是並行處理多項任務,但本質上乙個處理器在某個時間點只能處理乙個任務,屬於序列執行。在單處理器的情況下,併發問題源於多道程式設計系統的乙個基本特性 程序的相對執行速度不可 它取決於其他程序的活動 作業系統處理中斷的方式以及作業系統的排程策略。在分布式環境下,併發產生的可能性就更大...

如何解決埠的time wait

使用乙個壓力生成的客戶端進行壓力測試時,如果需要頻繁關閉連線,這時候就會導致機器出現大量的time wait埠,這會導致埠不夠用,從而影響發起新的連線。這一問題可以通過設定 etc sysctl.conf來解決。net.ipv4.tcp syncookies 1 net.ipv4.tcp tw re...