(1)process_local(程序本地化)(推薦使用)
**和資料在同乙個(executor)程序中,資料在executor的blockmanager中,效能最好
(2)node_local(節點本地化)(推薦使用)
**和資料在乙個節點中,主要分兩種情況
i)資料在節點上,task在節點上的executor中執行
ii)節點上起了多個executor,比如executor1,executor2,資料在executor1的blockmanager中,task執行在executor2中。資料會在jvm程序之間傳遞
(3)no_pref(資料沒有首選)
(4)rack_local(機架本地化)
資料在相同機架上的不同的伺服器中,資料需要在節點之間傳輸
(5)any(資料在不同的伺服器上及機架上)
效能最差
spark的排程任務執行是要讓任務獲取最近的本地行級別的資料,但是有些特殊場景,不得不放棄最近本地性級別,
比如資料和executor在同一臺節點上,此時executor正在繁忙,同時其他節點上的executor存在空閒,預設情況下spark會等待當前節點executor一段時間,看能否處於可用狀態。如果executor不可用,spark會將task投放到其他節點上的空閒executor中,資料會被傳輸到那個遠端節點上。
sparkconf.set("spark.locality.wait","3s")
sparkconf.set("spark.locality.wait.node","3s")
sparkconf.set("spark.locality.wait.process","3s")
sparkconf.set("spark.locality.wait.rack","3s")
這些引數預設都是3s,在調優中,要多試幾次,看本地化是否大多處於process_local或者node_local
executor被殺死,情況很多,但是我們可以從以下方面著手,看是否有好轉
(1)移除rdd快取
(2)spark.storage.memoryfraction(預設是0.6)
該引數是memory store管理rdd cache資料
如果頻繁發生full gc,可以考慮降低這個比值,這樣rdd cache可用的記憶體空間減少(剩下的部分cache資料就需要通過disk store寫到磁碟上了),會帶來一定的效能損失,但是騰出更多的記憶體空間用於執行任務,減少full gc發生的次數,反而可能改善程式執行的整體效能。
(3)spark.yarn.executor.memoryoverhead(單位是m)
executor執行的時候,用的記憶體可能會超過executor-memoy,所以會為executor額外預留一部分記憶體。spark.yarn.executor.memoryoverhead代表了這部分記憶體。
Spark 程式在Yarn上的記憶體問題,簡單解釋
當上傳spark程式時,總會有出現以下這個錯誤 spark submit報錯 container exited with a non zero exit code 143 還有比如 outofmemory,memory exceed 等等,乙個頭兩個大。對於只是使用spark程式的人,我實在是沒興趣...
spark 效能調優
核心調優引數如下 num executors executor memory executor cores driver memory spark.default.parallelizm spark.storage.memoryfraction spark.shuffle.memoryfractio...
Spark效能調優
日常工作使用spark處理業務問題中不可避免的都會碰到需要對spark的效能進行調優的情況,這裡就介紹一下對spark的效能調優。1.調節記憶體分配 因為在spark中堆記憶體被劃分為兩塊,一塊是給rdd的cache和persist操作rdd資料快取使用的,另一塊是給spark運算元函式使用的,函式...