HDFS基本概念與重新梳理(hdfs檔案資訊介紹)
HDFS(Hadoop Distributed File System )Hadoop分散式檔案系統。是根據google發表的論文翻版的。論文為GFS(Google File System)Google 檔案系統(中文,英文)。
HDFS有很多特點:
1.儲存多個副本,且提供容錯機制,副本丟失或宕機自動恢復。預設存3份。
2.執行在廉價的機器上。
3.適合大資料的處理。HDFS預設會將檔案分割成block,64M為1個block。然後將block按鍵值對儲存在HDFS上,並將鍵值對的對映存到記憶體中。如果小檔案太多,那記憶體的負擔會很重。
一、資料塊(block)
1.HDFS(Hadoop Distributed File System)預設的最基本的儲存單位是64M的資料塊。
2. 和普通檔案系統相同的是,HDFS中的檔案是被分成64M一塊的資料塊儲存的。
3.不同於普通檔案系統的是,HDFS中,如果一個檔案小於一個數據塊的大小,並不佔用整個資料塊儲存空間。
4.塊大小設定為64m的原因:為了最小化定址開銷。如設定過大,會導致map數過少,叢集利用率過低。如設定過小,要維護的元資料資訊過多,由於元資料資訊是儲存在記憶體中的,所以可能會造成記憶體溢位。
二、HDFS資料節點
1.元資料節點(Namenode)
1.其將所有的檔案和資料夾的元資料儲存在一個檔案系統樹中
2.元資料中存放著檔案包括哪些資料塊以及這些資料分佈到哪些DataNode資料節點上
3.VERSION——java properties檔案,儲存了HDFS的版本號。
4.fsimage——元資料的映象檔案,可以理解為元資料儲存在磁碟上的一個副本
5.edits——修改日誌檔案,記錄引發元資料改變的操作。
6.fstime——合併fimage和edits的時間
2.資料節點(DataNode)
1.檔案系統中真正儲存資料的地方
2.客戶端(client)或者元資料資訊(namenode)可以向資料節點請求寫入或者讀出資料塊。
3.其週期性的向元資料節點回報其儲存的資料塊資訊。
資料節點的VERSION檔案格式如下:
blk_儲存的是HDFS的資料塊,其中儲存了具體的二進位制資料。
blk_.meta儲存的是資料塊的屬性資訊:版本資訊,型別資訊,和checksum
當一個目錄中的資料塊到達一定數量的時候,則建立子資料夾來儲存資料塊及資料塊屬性資訊。
3.從元資料節點(secondary namenode)
1.從元資料節點並不是元資料節點出現問題時候的備用節點,它和元資料節點負責不同的事情。
2.其主要功能就是週期性將元資料節點的fsimage和edits合併,以防edits修改日誌檔案過大。
3.合併過後的名稱空間映象檔案也在從元資料節點儲存了一份,以防元資料節點失敗的時候,可以恢復。
image
三、檔案系統名稱空間映像檔案及修改日誌
1.當檔案系統客戶端(client)進行寫操作時,首先把它記錄在修改日誌中(edit log)
2.元資料節點在記憶體中儲存了檔案系統的元資料資訊。在記錄了修改日誌後,元資料節點則修改記憶體中的資料結構。
3.每次的寫操作成功之前,修改日誌都會同步(sync)到檔案系統。
4.fsimage檔案,也即名稱空間映像檔案,是記憶體中的元資料在硬碟上的checkpoint,它是一種序列化的格式,並不能夠在硬碟上直接修改。
5.同資料的機制相似,當元資料節點失敗時,則最新checkpoint的元資料資訊從fsimage載入到記憶體中,然後逐一重新執行修改日誌中的操作。
6.從元資料節點就是用來幫助元資料節點將記憶體中的元資料資訊checkpoint到硬碟上的
checkpoint的過程如下:
從元資料節點通知元資料節點生成新的日誌檔案,以後的日誌都寫到新的日誌檔案中。
從元資料節點用http get從元資料節點獲得fsimage檔案及舊的日誌檔案。
從元資料節點將fsimage檔案載入到記憶體中,並執行日誌檔案中的操作,然後生成新的 fsimage檔案。
從元資料節點獎新的fsimage檔案用http post傳回元資料節點
元資料節點可以將舊的fsimage檔案及舊的日誌檔案,換為新的fsimage檔案和新的日誌 檔案(第一步生成的),然後更新fstime檔案,寫入此次checkpoint的時間。
這樣元資料節點中的fsimage檔案儲存了最新的checkpoint的元資料資訊,日誌檔案也重新開始,不會變的很大了。