其實就是我們寫的spark作業,打成jar執行起來的主程序。
比如乙個1m的map(隨機抽取的map) ,建立1000個副本,網路傳輸!分到1000個機器上,則占用了1g記憶體。
不必要的網路消耗,和記憶體消耗。
如果你是從哪個表裡面讀取了一些維度資料,比方說,所有商品的品類的資訊,在某個運算元函式中使用到100m。
1000個task 。100g的資料,要進行網路傳輸,集群瞬間效能下降。
如果說,task使用大變數(1m-100m),明知道會導致大量消耗。該怎麼做呢?
使用廣播!!
不是每個task乙份副本,而是變成每個節點executor上乙個副本。
50個executor 1000個task。
乙個map10m
預設情況下,1000個task 1000個副本
1000 * 10m = 10 000m = 10 g
10g的資料,網路傳輸,在集群中,耗費10g的記憶體資源。
如果使用 廣播變數,
50個executor ,50個副本,10m*50 =500m的資料。
網路傳輸,而且不一定是從drver傳輸到各個節點,還可能是從就近的節點
的executor的blockmanager上獲取變數副本,網路傳輸速度大大增加。
之前10000m現在500m。
20倍網路傳輸效能的消耗。20倍記憶體消耗的減少。
雖然說,不一定會對效能產生決定向性的作用。比如執行30分鐘的spark作業,可能做了廣播變數以後,速度快了2分鐘。變成28分鐘。
沒有經過任何肉條有手段的spark作業,16個小時
三板斧下來(資源,並行度,rdd重構) ,就可以到5小時。
然後重要的乙個調優,影響特別大,shuffle調優,2~3小時,應用了10個以上的效能調優技術點。
jvm調優+廣播後,30分鐘。
整體的調優效果: 16小時 變成 30分鐘!!!!
spark廣播和累加器的使用
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運算元函式使用的,函式...
Spark效能調優 JVM調優
通過一張圖讓你明白以下四個問題 1.jvm gc機制,堆記憶體的組成 2.spark的調優為什麼會和jvm的調優會有關聯?因為scala也是基於jvm執行的語言 3.spark中oom產生的原因 4.如何在jvm這個層面上來對spark進行調優 補充 spark程式執行時 jvm堆記憶體分配比例 r...