spark共享變數 廣播變數和累加變數

2022-07-28 10:15:34 字數 630 閱讀 7341

從三個方面來分析:1.什麼時候使用,2.原理是什麼3.效能上有什麼優化

累加變數:--(自定義累加器很重要)

原理:task只能對accumulator進行累加操作,不能讀取它的值。

只有driver程式可以讀取accumulator的值。

效能優化:

因為每個機器上都要對資料進行計算分析,最後要將各個節點計算的資料進行累加,此時如果定義多個變數來對資料進行累加計算,而此時統計起來非常困難,則應該自定義乙個整體變數來實現累加;對總體進行累加計算,累加之後返回給客戶端,並且這種累加器也只能在客戶端讀取。

accumulator可以讓多個task共同操作乙份變數,主要可以進行累加操作。

廣播變數:

使用場景:比如資料庫中乙份公共配置**,需要同步給各個節點進行查詢

原理:通過呼叫sparkcontext的broadcast()方法,來針對某個變數建立廣播變數。

然後在運算元的函式內,使用到廣播變數時,每個excutor只會拷貝乙份副本了。每個

節點可以使用廣播變數的value()方法獲取值。

效能優化:

broadcast variable會將使用到的變數,

僅僅為每個excutor拷貝乙份,更大的用處是優化效能,減少網路傳輸以及記憶體消耗。

Spark共享變數

預設情況下,如果在乙個運算元的函式中使用到了某個外部的變數,那麼這個變數的值會被拷貝到每個task中。此時每個task只能操作自己的那份變數副本。如果多個task想要共享某個變數,那麼這種方式是做不到的。spark為此提供了兩種共享變數,一種是broadcast variable 廣播變數 另一種是...

Spark的廣播變數

將每個task都要計算的資料設定成廣播變數,如果不設定成廣播變數,則每個 task 都會儲存乙份這樣一模一樣的資料,這樣就占用了很多的儲存空間,將共享變數設定成廣播變數後只在乙個 excuter 裡面儲存這樣乙份 共享資料,這個 excuter 裡面的task 計算的時候共享這樣乙份資料,這樣就減少...

Spark廣播變數Broadcast

spark廣播變數的目的是讓每個worker節點在記憶體中儲存乙個唯讀的物件,節省了在每次tasks建立傳送到woker節點中攜帶該物件副本的網路io。一些需要在多個task中使用的,不可變的大資料集合物件尤其適合被定義程廣播變數。廣播變數的定義方法,fron spark官網 val broadca...