中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spark(三):blockManager、broadcast、cache、checkpoint

發布時間:2020-04-17 21:22:09 來源:網絡 閱讀:773 作者:afeiye 欄目:大數據

blockManager

spark(三):blockManager、broadcast、cache、checkpoint

  1. Driver和executor上分別都會啟動blockManager,其中driver上擁有所有executor上的blockManager的引用;所有executor上的blockManager都持有driver上的blockManager的引用;
  2. blockManagerSlave會不斷向blockManagerMaster發送心跳,更新block信息等;
  3. BlockManager對象被創建的時候會創建出MemoryStore和DiskStore對象用以存取block,如果內存中擁有足夠的內存, 就 使用 MemoryStore存儲, 如果 不夠, 就 spill 到 磁盤中, 通過 DiskStore進行存儲。
  4. DiskStore 有一個DiskBlockManager,DiskBlockManager 主要用來創建并持有邏輯 blocks 與磁盤上的 blocks之間的映射,一個邏輯 block 通過 BlockId 映射到一個磁盤上的文件。 在 DiskStore 中會調用 diskManager.getFile 方法, 如果子文件夾不存在,會進行創建, 文件夾的命名方式為(spark-local-yyyyMMddHHmmss-xxxx, xxxx是一個隨機數), 所有的block都會存儲在所創建的folder里面。
  5. MemoryStore 相對于DiskStore需要根據block id hash計算出文件路徑并將block存放到對應的文件里面,MemoryStore管理block就顯得非常簡單:MemoryStore內部維護了一個hash map來管理所有的block,以block id為key將block存放到hash map中。而從MemoryStore中取得block則非常簡單,只需從hash map中取出block id對應的value即可。
  6. GET操作 如果 local 中存在就直接返回, 從本地獲取一個Block, 會先判斷如果是 useMemory, 直接從內存中取出, 如果是 useDisk, 會從磁盤中取出返回, 然后根據useMemory判斷是否在內存中緩存一下,方便下次獲取, 如果local 不存在, 從其他節點上獲取, 當然元信息是存在 drive上的,要根據我們上文中提到的 GETlocation 協議獲取 Block 所在節點位置, 然后到其他節點上獲取。
  7. PUT操作 操作之前會加鎖來避免多線程的問題, 存儲的時候會根據 存儲級別, 調用對應的是 memoryStore 還是 diskStore, 然后在具體存儲器上面調用 存儲接口。 如果有 replication 需求, 會把數據備份到其他的機器上面。

cache、persist、checkpoint

  1. 如果要對一個RDD進行持久化,只要對這個RDD調用cache()和persist()即可。
  2. cache()方法表示:使用非序列化的方式將RDD中的數據全部嘗試持久化到內存中。
  3. persist()方法表示:手動選擇持久化級別,并使用指定的方式進行持久化。默認緩存級別是StorageLevel.MEMORY_ONLY,也就是cache就是這個默認級別的。
  4. checkpoint是將數據持久化到HDFS或者硬盤。
  5. rdd.persist(StorageLevel.DISK_ONLY) 與 checkpoint 也有區別。前者雖然可以將 RDD 的 partition 持久化到磁盤,但該 partition 由 blockManager 管理。一旦 driver program 執行結束,也就是 executor 所在進程 CoarseGrainedExecutorBackend stop,blockManager 也會 stop,被 cache 到磁盤上的 RDD 也會被清空(整個 blockManager 使用的 local 文件夾被刪除)。而 checkpoint 將 RDD 持久化到 HDFS 或本地文件夾,如果不被手動 remove 掉( 話說怎么 remove checkpoint 過的 RDD? ),是一直存在的,也就是說可以被下一個 driver program 使用,而 cached RDD 不能被其他 dirver program 使用。

broadcast、accumulator

  1. 廣播變量允許程序員將一個只讀的變量緩存在每臺機器上,而不用在任務之間傳遞變量。(注意是一個較大的只讀變量,不能修改)
  2. Accumulator是spark提供的累加器,顧名思義,該變量只能夠增加。
  3. 只有driver能獲取到Accumulator的值(使用value方法),Task只能對其做增加操作(使用 +=)
  4. 使用累加器的過程中只能使用一次action的操作才能保證結果的準確性。如果需要使用多次則使用cache或persist操作切斷依賴。
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹿泉市| 卢氏县| 吴江市| 定日县| 徐闻县| 江川县| 新邵县| 开原市| 南京市| 延寿县| 韶山市| 犍为县| 镇平县| 综艺| 耿马| 辽阳市| 平江县| 玛多县| 宜黄县| 巴彦淖尔市| 长春市| 津市市| 南郑县| 宜章县| 道孚县| 三门峡市| 青神县| 永顺县| 中宁县| 祁门县| 襄樊市| 香河县| 雷波县| 遂平县| 枣庄市| 呼图壁县| 周至县| 皮山县| 高阳县| 松阳县| 巧家县|