Spark效能調優之 在實際專案中廣播大變數

2021-07-24 06:12:35 字數 1099 閱讀 5155

其實就是我們寫的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...