blockManager
10年積累的成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有安康免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
- Driver和executor上分別都會(huì)啟動(dòng)blockManager,其中driver上擁有所有executor上的blockManager的引用;所有executor上的blockManager都持有driver上的blockManager的引用;
- blockManagerSlave會(huì)不斷向blockManagerMaster發(fā)送心跳,更新block信息等;
- BlockManager對(duì)象被創(chuàng)建的時(shí)候會(huì)創(chuàng)建出MemoryStore和DiskStore對(duì)象用以存取block,如果內(nèi)存中擁有足夠的內(nèi)存, 就 使用 MemoryStore存儲(chǔ), 如果 不夠, 就 spill 到 磁盤中, 通過 DiskStore進(jìn)行存儲(chǔ)。
- DiskStore 有一個(gè)DiskBlockManager,DiskBlockManager 主要用來創(chuàng)建并持有邏輯 blocks 與磁盤上的 blocks之間的映射,一個(gè)邏輯 block 通過 BlockId 映射到一個(gè)磁盤上的文件。 在 DiskStore 中會(huì)調(diào)用 diskManager.getFile 方法, 如果子文件夾不存在,會(huì)進(jìn)行創(chuàng)建, 文件夾的命名方式為(spark-local-yyyyMMddHHmmss-xxxx, xxxx是一個(gè)隨機(jī)數(shù)), 所有的block都會(huì)存儲(chǔ)在所創(chuàng)建的folder里面。
- MemoryStore 相對(duì)于DiskStore需要根據(jù)block id hash計(jì)算出文件路徑并將block存放到對(duì)應(yīng)的文件里面,MemoryStore管理block就顯得非常簡單:MemoryStore內(nèi)部維護(hù)了一個(gè)hash map來管理所有的block,以block id為key將block存放到hash map中。而從MemoryStore中取得block則非常簡單,只需從hash map中取出block id對(duì)應(yīng)的value即可。
- GET操作 如果 local 中存在就直接返回, 從本地獲取一個(gè)Block, 會(huì)先判斷如果是 useMemory, 直接從內(nèi)存中取出, 如果是 useDisk, 會(huì)從磁盤中取出返回, 然后根據(jù)useMemory判斷是否在內(nèi)存中緩存一下,方便下次獲取, 如果local 不存在, 從其他節(jié)點(diǎn)上獲取, 當(dāng)然元信息是存在 drive上的,要根據(jù)我們上文中提到的 GETlocation 協(xié)議獲取 Block 所在節(jié)點(diǎn)位置, 然后到其他節(jié)點(diǎn)上獲取。
- PUT操作 操作之前會(huì)加鎖來避免多線程的問題, 存儲(chǔ)的時(shí)候會(huì)根據(jù) 存儲(chǔ)級(jí)別, 調(diào)用對(duì)應(yīng)的是 memoryStore 還是 diskStore, 然后在具體存儲(chǔ)器上面調(diào)用 存儲(chǔ)接口。 如果有 replication 需求, 會(huì)把數(shù)據(jù)備份到其他的機(jī)器上面。
cache、persist、checkpoint
- 如果要對(duì)一個(gè)RDD進(jìn)行持久化,只要對(duì)這個(gè)RDD調(diào)用cache()和persist()即可。
- cache()方法表示:使用非序列化的方式將RDD中的數(shù)據(jù)全部嘗試持久化到內(nèi)存中。
- persist()方法表示:手動(dòng)選擇持久化級(jí)別,并使用指定的方式進(jìn)行持久化。默認(rèn)緩存級(jí)別是StorageLevel.MEMORY_ONLY,也就是cache就是這個(gè)默認(rèn)級(jí)別的。
- checkpoint是將數(shù)據(jù)持久化到HDFS或者硬盤。
- rdd.persist(StorageLevel.DISK_ONLY) 與 checkpoint 也有區(qū)別。前者雖然可以將 RDD 的 partition 持久化到磁盤,但該 partition 由 blockManager 管理。一旦 driver program 執(zhí)行結(jié)束,也就是 executor 所在進(jìn)程 CoarseGrainedExecutorBackend stop,blockManager 也會(huì) stop,被 cache 到磁盤上的 RDD 也會(huì)被清空(整個(gè) blockManager 使用的 local 文件夾被刪除)。而 checkpoint 將 RDD 持久化到 HDFS 或本地文件夾,如果不被手動(dòng) remove 掉( 話說怎么 remove checkpoint 過的 RDD? ),是一直存在的,也就是說可以被下一個(gè) driver program 使用,而 cached RDD 不能被其他 dirver program 使用。
broadcast、accumulator
- 廣播變量允許程序員將一個(gè)只讀的變量緩存在每臺(tái)機(jī)器上,而不用在任務(wù)之間傳遞變量。(注意是一個(gè)較大的只讀變量,不能修改)
- Accumulator是spark提供的累加器,顧名思義,該變量只能夠增加。
- 只有driver能獲取到Accumulator的值(使用value方法),Task只能對(duì)其做增加操作(使用 +=)
- 使用累加器的過程中只能使用一次action的操作才能保證結(jié)果的準(zhǔn)確性。如果需要使用多次則使用cache或persist操作切斷依賴。
當(dāng)前題目:spark(三):blockManager、broadcast、cache、checkpoint
URL標(biāo)題:http://muchs.cn/article18/gessdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、營銷型網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、虛擬主機(jī)、網(wǎng)站導(dǎo)航、做網(wǎng)站
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源:
創(chuàng)新互聯(lián)