HDFS的儲存結構以及操作流程簡單總結

來源:互聯網
上載者:User

一、NameNode資料結構

1、物理結構
${dfs.name.dir}/current/{VERSION,edits,fsimage,fstime}

dfs.name.dir是一個目錄列表,儲存每個目錄的鏡像。VERSION檔案是Java屬性檔案,包含運行HDFS的版本資訊。

edits,是編輯記錄檔。當客戶斷執行寫操作的時,NameNode首先會在編輯日誌中寫下記錄,並在記憶體中儲存一個檔案系統中繼資料,這個描述符會在編輯日誌有了改動後更新。記憶體中的中繼資料用來提供讀資料請求服務。

編輯日誌會在每次成功操作之後,且成功碼尚未返回給用戶端之前進行重新整理和同步。對於要寫入多個目錄的操作,該寫入流要重新整理和同步到所有的副本上,這就保證了操作不會因故障遺失資料。

fsimage 是一個二進位檔案,當中記錄了HDFS中所有檔案和目錄的中繼資料資訊,以及檔案中塊的相關資訊

2、邏輯結構
a、NameNode載入FsImage到記憶體後,形成一個分類樹的結構(FSDirectory,INode,INodeFile<BlockInfo[]>)
b、Datanode通過心跳,上報block資訊,在NameNode中形成BlocksMap(Block-->DataNode的對應關係)
c、NameNode分配塊到DataNode,在寫檔案塊的過程中,出現錯誤,那麼會由client或DataNode上報給NameNode,表示該塊失效。NameNode儲存在CorruptReplicationMap中
d、在DataNode處於退役階段、離開安全模式等階段時,需要檢查該DataNode的blocks的數量是否達到複製因子的要求,沒有則加入需要複製的請求隊列UnderReplicatedBlocks
e、儲存正在複製的資料區塊的資訊,PendingReplicationBlocks
f、當一個DataNode失效恢複後,因資料區塊太多,需要刪除的塊資訊儲存在excessReplicateMap
g、用戶端寫檔案需要lease,逾時需要剔除,該lease資訊儲存在NameNode上。

二、DataNode

1、物理資料結構
${dfs.data.dir}/current/VERSION
                       /blk_<id_1>
                       /blk_<id_1>.meta
                       /blk_<id_1>
                       /blk_<id_1>.meta
                       /...
                       /blk_<id_64>
                       /blk_<id_64>.meta
                       /subdir0/
                       /subdir1/
                       /...
                       /subdir63/
               /previous/
               /detach/
               /tmp/
               /in_use.lock
               /storage
current是當前的工作目錄,previous是升級HDFS之前的工作目錄,在升級時,HDFS並不會將檔案從previous拷貝到current目錄中,而是遍曆previous中的所有檔案,在current目錄中建立永久連結。

detach目錄儲存用於copy-on-write的檔案,在Datanode重啟時需要恢複。

tmp目錄儲存一些臨時資料。

in_use.lock檔案用於對datanode加鎖,storage檔案儲存了布局版本及升級版本提示資訊。

下面來看current目錄的結構,目錄中的檔案都有blk_首碼,有兩類檔案:塊檔案和塊中繼資料檔案(.meta尾碼)。當目錄中資料區塊的數量增加到64個(由dfs.datanode.numblocks屬性設定,子目錄的數量也是由該屬性設定),datanode會建立一個子目錄來存放新的資料。採用樹狀結構的組織方式,datanode可以有效管理各個目錄中的檔案,避免將很多檔案放在一個目錄之中。

2、邏輯結構

三、協議介面
  ClientProtocol:client--->NameNode,表示client和NameNode之間的通訊,主要有以下操作
(create、append、setReplication、setPermission、addBlock、setOwner、rename、delete、mkdirs、getListing)

  DataNodeProtocol:dataNode--->namenode,表示datanode和namenode之間的通訊,主要有以下操作
               (register、sendHeartBeat、blockReport、blockReceived、reportBadBlocks)

  NameNodeProtocol:secondNameNode--->NameNode表示secondryNameNode和NameNode之間的通訊(用於checkpoint,fsimage的備份用)

四、讀寫操作流程

1、讀資料

 

2、寫資料

說明:當datanode完成一個資料區塊時,就向namenode進行彙報
寫資料是按照packet(預設64K)來的,當完成一個packet時,就向dataNode發送資料
client調用flush操作時,不管是否達成一個packet的大小,都向dataNode發送資料
當然調用close操作,銀行一個flush操作,並向NameNode進行彙報

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.