一、Broadcast徹底解密

1、Broadcast就是將數(shù)據(jù)從一個節(jié)點發(fā)送到其他節(jié)點。
2、Broadcast是分布式的共享數(shù)據(jù),默認情況下只要程序運行Broadcast變量就會存在,因為Broadcast底層是由BlockManager管理的,但是也可以手動銷毀Broadcast變量。
3、Broadcast一般用于處理共享的配置文件,通用的Dataset、常用的數(shù)據(jù)結構等等,但是不適合存放太大的數(shù)據(jù)在Broadcast,Broadcast不會內存溢出,因為其數(shù)據(jù)的保存的StorageLevel是MEMORY_AND_DISK,雖然如此,也不可以放太大的數(shù)據(jù),因為網(wǎng)絡IO和可能的單點壓力會非常大。
4、廣播的Broadcast變量是只讀變量,保持了數(shù)據(jù)的一致性。
5、Broadcast的使用:
* {{{
* scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
* broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)
*
* scala> broadcastVar.value
* res0: Array[Int] = Array(1, 2, 3)
* }}}
6、HttpBroadcast方式的Broadcast:最開始的時候數(shù)據(jù)存在Driver的文件系統(tǒng)中,Driver會在本地創(chuàng)建一個文件夾存放Broadcast中的data,然后啟動HttpServer來訪問文件夾中的數(shù)據(jù),同時寫入到BlockManager中,獲得BlockId(BroacastBlockId)。當?shù)谝淮蜤xecutor中Task要訪問Broadcast變量的時候,會向Driver通過HttpServer來訪問數(shù)據(jù),然后會在Executor中的BlockManager中注冊,這樣后續(xù)的Task需要訪問Broadcast變量的時候會首先查詢當前Executor的BlockManager中是否存在,如果存在就就直接獲取數(shù)據(jù)。
7、BroadcastManager是用來管理Broadcast的,該對象是在SparkContext創(chuàng)建SparkEnv的時候創(chuàng)建的。在實例化BroadcastManager的時候會創(chuàng)建BroadcastFactory工廠來構建具體的Broadcst類型,默認是TorrentBroadcastFactory。
8、HttpBroadcast存在單點故障和網(wǎng)絡IO性能問題,所以默認使用TorrentBroadcast的方式,開始數(shù)據(jù)存放在Driver端,假設A點需要訪問數(shù)據(jù),就會去Driver端拿數(shù)據(jù),然后在本地存儲一份,A節(jié)點也就擁有了一個副本,A節(jié)點也就成了數(shù)據(jù)源,降低了節(jié)點壓力。
9、TorrentBroadcast按照BLOCK_SIZE(默認4m)將Broadcast中的數(shù)據(jù)劃分成不同的block,然后講分塊信息也就是meta信息存放到Driver端的BlockManager中,同時會通知BlockManagerMaster說明meta信息存放完畢。
二、Broadcast源碼解密
當廣播數(shù)據(jù)的時候,會調用SparkContext的broadcast方法,在方法內部,Broadcast是由BroadcastManager管理創(chuàng)建的,而BroadcastManager又是有SparkEnv管理的,

SparkEnv是由SparkContext中的createSparkEnv創(chuàng)建的,進而調用SparkEnv的createDriverEnv方法,最終會調用create自身的方法,構建一些所需的組建。管理Broadcast的BoradcastManager就在此方法中創(chuàng)建。

在創(chuàng)建BroadcastManager實例的時候,回調用initialize初始化方法,創(chuàng)建BoradcastFactory,默認是TorrentBroadcastFactory:咋

BroadcastManager初始化之后,就可以調用newBroadcast方法,根據(jù)BroadcastFactory創(chuàng)建相應的Broadcast(TorrentBroadcast)進行數(shù)據(jù)的廣播:

TorrentBroadcastFactory的newBroadcast方法創(chuàng)建一個TorrentBroadcast實例。當我們進行數(shù)據(jù)的廣播的時候,會調用writeBlocks方法,將廣播的數(shù)據(jù)劃分成多個block塊(默認是4m),把這些block塊存放在Driver端:
當獲取廣播變量的值時,會調用相應Broadcast的getValue方法,在TorrentBroadcast中readBroadcastBlock方法,首先會在本地的BlockManager根據(jù)BroadcastBlockId獲取數(shù)據(jù),如果獲取不到進而調用readBlocks方法

TorrentBroadcast中的readBlocks方法會從Driver端或者其他的Executor獲取相應的block快數(shù)據(jù),然后把獲取的block數(shù)據(jù)保存到Executor的BlockManager中:


另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前題目:SparkBroadcast運行機制解密(42)-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://www.chinadenli.net/article24/dccdje.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供自適應網(wǎng)站、定制網(wǎng)站、網(wǎng)站排名、微信小程序、微信公眾號、電子商務
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容