91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

怎么實現Spark2.x BlockManager原理剖析

發布時間:2021-12-03 16:04:09 來源:億速云 閱讀:133 作者:柒染 欄目:大數據

這篇文章將為大家詳細講解有關怎么實現Spark2.x BlockManager原理剖析,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

一、概述

    BlockManager是Spark底層負責數據的讀寫和管理的一個模塊。

    對于每一個Spark任務,Driver節點都會有一個BlockManagerMaster 實例,而每一個Executor上都對應的有一個BlockManager實例,它也構成了一套Master/Slaver架構的數據管理體系,比如ShuffleWriter都是通過將BlockManager將數據寫入磁盤或者內容、各個Task在拉取數據的時候也是通過BlockManger建立連接,然后去拉取數據。

    這里我們先對BlockManager的原理做一個簡單的介紹。

 

二、圖解BlockManager整體架構

怎么實現Spark2.x BlockManager原理剖析

    下面詳細講解這個架構圖:

1.由BlockManager原理架構圖可以看出對于每個Spark任務,Driver都會初始化一個BlockManagerMaster實例,初始化同時也會創建一個BlockManagerMasterEndPoint實例,BlockManagerMasterEndpoint是一個ThreadSafeRpcEndpoint類,接收Executor中Blockmanager的消息請求,進行對應的處理。SparkEnv類中的實現代碼如下:

   val blockManagerMaster = new BlockManagerMaster(registerOrLookupEndpoint(      BlockManagerMaster.DRIVER_ENDPOINT_NAME,      new BlockManagerMasterEndpoint(rpcEnv, isLocal, conf, listenerBus)),      conf, isDriver)

2.在BlockManagerMasterEndPoint中管理著一組HashMap數據結構BlockManagerInfo信息,保存著BlockManagerId與BlockManagerInfo的對應關系,這里相當于管理者每個Executor中的Block的元數據信息,比如各個BlockManager端新增、刪除了一個Block后,這里對應也要更新對應的元數據信息,BlockManagerMasterEndPoint類實現代碼如下:

  // Mapping from block manager id to the block manager's information.  private val blockManagerInfo = new mutable.HashMap[BlockManagerId, BlockManagerInfo]

3.BlockManagerInfo里面保存著所在Executor所有Block的狀態信息,這里也是一個HashMap結構,保存著block與其BlockStatus信息,BlockManagerInfo類代碼實現如下:

// Mapping from block id to its status.private val _blocks = new JHashMap[BlockId, BlockStatus]

    Driver端總結一下,其實就是通過BlockManagerMaster維護各個節點Block元數據信息,比如各個BlockManager端的Block發生增、刪、改等操作,都會在這里進行更新。

4.在Executor端的都有一個BlockManager實例,它有四個比較重要的組件,這里大體介紹下,后面源碼剖析會作詳細介紹:

    1).DiskStore   

    負責磁盤數據的讀寫操作;

    2).MemoryStore 

     負責內存數據的讀寫操作;

    3).ConnectionManager:

    負責與其他的BlockManger連接,比如ShuffleReader階段需要從遠程拉取數據,這里負責遠程的連接。

    4).BlockTransferService

    這里ConnectionManager與其他的BlockManger連接成功后,負責進行數據的傳輸。

5.BlockManager創建成功之后的第一件事就是去向BlockManagerMaster進行注冊,此時就會在它的blockManagerInfo中添加對應的BlockManagerInfo信息。

6.這里有一點需要注意:BlockManager進行數據寫操作時,優先將數據寫入內存,如果內存不夠會根據自己的算法,將內存中的部分數據寫入磁盤。此外如果指定了relication副本,就會使用BlockManager將數據復制一份到其他的BlockManager中,所以就會存在一個Block會存在兩個BlockManger的情況。

7.BlockManager進行數據讀取時,比如ShuffleReader階段,如果能從本地讀取數據就從本地讀,不然會通過ConnectionManager與遠程BlockManager節點建立連接,連接成功后,BlockTransferService再去BlockManager節點獲取數據。

8.只要是BlockManager端對數據進行了增、刪、改操作,都會向BlockManagerMaster發送BlockStatus變更的消息通知,然后BlockManagerMaster會更新他自己維護的BlockManagerInfo元數據信息。

關于怎么實現Spark2.x BlockManager原理剖析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

定安县| 富顺县| 南陵县| 连山| 天祝| 通州市| 安平县| 鄂尔多斯市| 于田县| 梅州市| 额济纳旗| 金阳县| 南昌市| 朔州市| 蒲江县| 七台河市| 宜川县| 永新县| 孟州市| 麟游县| 都安| 冕宁县| 志丹县| 桃江县| 清镇市| 永顺县| 始兴县| 英山县| 荣昌县| 崇州市| 开阳县| 磐安县| 蒙自县| 小金县| 中超| 广安市| 灌南县| 克拉玛依市| 西昌市| 杭锦后旗| 周宁县|