spark Broadcast 內幕解密

2021-07-26 07:37:19 字數 2422 閱讀 5822

一:broadcast徹底解析

1, broadcast就是將資料從乙個節點傳送到其它的節點上;例如

driver

上有一張表,而

executor

中的每個並行執行的

task

(100

萬個task

)都要查詢這張表,那我們通過

broadcast

的方式就只需要往每個

executor

把這張表傳送一次就行了,

executor

中的每個執行的

task

查詢這張唯一的表,而不是每次執行的時候都從

driver

獲得這張表!

2, 這就好像servletcontext的具體作用,只是

broadcast

是分布式的共享資料,預設情況下只要程式在執行

broadcast

變數就會存在,因為

broadcast

在底層是通過

blockmanager

管理的!但是你可以手動指定或者配置具體週期來銷毀

broadcast

變數!

3, broadcast一般用於處理共享配置檔案、通用的

dataset

、常用的資料結構等等;但是不適合存放太大的資料在

broadcast

,broadcast

不會記憶體溢位,因為其資料的儲存的

storagelevel

是memory_and_disk

的方式;雖然如此,我們也不可以放入太大的資料在

broadcast

中,因為網路

io和可能的單點壓力會非常大!

4, 廣播broadcast變數是唯讀變數,最為輕鬆保持了資料的一致性!

5, broadcast的使用:

}} 6, httpbroadcast方式的

broadcast

,最開始的時候資料放在

driver

的本地檔案系統中,

driver

在本地會建立乙個資料夾來存放

broadcast

中的data

,然後啟動

來訪問資料夾中的資料,同時寫入到

blockmanager

(storagelevel

是memory_and_disk

)中獲得

blockid

(broadcastblockid

),當第一次

eexcutor

中的task

要訪問broadcast

變數的時候,會向

driver

通過httpserver

來訪問資料,然後會在

executor

中的blockmanager

中註冊該

broadcast

中的資料

blockmanager

,這樣後需要的

task

需要訪問

broadcast

的變數的時候會首先查詢

blockmanager

中有沒有該資料,如果有就直接使用;

7, broadcastmanager是用來管理

broadcast

,該例項物件是在

sparkcontext

建立sparkenv

的時候建立的:

// called by sparkcontext or executor before using broadcast

private definitialize

() }}

在例項化broadcastmanager的時候會建立

broadcastfactory

工廠來構建具體實際的

broadcast

型別,預設情況下是

torrentbroadcastfactory;

8, httpbroadcast存在單點故障,和網路io效能問題,所以預設使用torrentbroadcast的方式,開始資料在driver中,假設a節點用了資料,b訪問的時候a節點就變成資料來源,依次類推,都是資料來源,當然是被blockmanger進行管理的,資料來源越多,節點壓力會大大降低;

9, torrentbroadcast按照

block_size(

預設是4mb)

講broadcast

中的資料劃分成為不同的

block

,然後將分塊資訊也就是

meta

資訊存放到

driver

的 blockmanager

中,同時會告訴

blockmanagermaster

說明meta

資訊存放完畢

內點法python 內點法

文字理解 內點法屬於約束優化演算法。約束優化演算法的基本思想是 通過引入效用函式的方法將約束優化問題轉換成無約束問題,再利用優化迭代過程不斷地更新效用函式,以使得演算法收斂。內點法 罰函式法的一種 的主要思想是 在可行域的邊界築起一道很高的 圍牆 當迭代點靠近邊界時,目標函式徒然增大,以示懲罰,阻止...

QPixmap loadFromData記憶體洩露

環境 qt 4.6.2 ubuntu 8.10 使用qt4.6.2 中的qpixmap loadfromdata const qbytearray data,const char format 0,qt imageconversionflags flags qt autocolor 發現記憶體有洩露...

內錶 XML互轉 JSON 內錶互轉

轉進內錶 strans try.call transformation id source xml lv text out options clear all 4.7 沒有這個options value handling accept data loss 這個引數也沒有 result data p ...