HDFS的基本概念
1、資料區塊(block)
HDFS(Hadoop Distributed File System)預設的最基本的儲存單位是64M的資料區塊。
和普通檔案系統相同的是,HDFS中的檔案是被分成64M一塊的資料區塊儲存的。
不同於普通檔案系統的是,HDFS中,如果一個檔案小於一個資料區塊的大小,並不佔用整個資料區塊儲存空間。
2、中繼資料節點(Namenode)和資料節點(datanode)
namenode用來管理檔案系統的命名空間
其將所有的檔案和檔案夾的中繼資料儲存在一個檔案系統樹中。
這些資訊也會在硬碟上儲存成以下檔案:命名空間鏡像(namespace image)及修改日誌(edit log)
其還儲存了一個檔案包括哪些資料區塊,分布在哪些資料節點上。然而這些資訊並不儲存在硬碟上,而是在系統啟動的時候從資料節點收集而成的。
datanode是檔案系統中真正儲存資料的地方。
用戶端(client)或者中繼資料資訊(namenode)可以向資料節點請求寫入或者讀出資料區塊。
其周期性的向中繼資料節點回報其儲存的資料區塊資訊。
從中繼資料節點(secondary namenode)
secondary namenode並不是中繼資料節點出現問題時候的備用節點,它和中繼資料節點負責不同的事情。
其主要功能就是周期性將namenode的namespace image和edit log合并,以防記錄檔過大。
合并過後的namespace image也在從中繼資料節點儲存了一份,以防namenode失敗的時候,可以恢複。
2.1、namenode檔案夾結構
${dfs.name.dir}/current/VERSION /edits /fsimage /fstime
VERSION檔案是java properties檔案,儲存了HDFS的版本號碼。
#Fri Dec 21 16:45:25 CST 2012namespaceID=1555019963cTime=0storageType=NAME_NODElayoutVersion=-32
layoutVersion是一個負整數,儲存了HDFS的持久化在硬碟上的資料結構的格式版本號碼。
namespaceID是檔案系統的唯一識別碼,是在檔案系統初次格式化時產生的。
cTime此處為0
storageType表示此檔案夾中儲存的是中繼資料節點的資料結構。
fsimage和edits:
當檔案系統用戶端(client)進行寫操作時,首先把它記錄在修改日誌中(edit log)
中繼資料節點在記憶體中儲存了檔案系統的中繼資料資訊。在記錄了修改日誌後,中繼資料節點則修改記憶體中的資料結構。
每次的寫操作成功之前,修改日誌都會同步(sync)到檔案系統。
fsimage檔案,也即命名空間映像檔案,是記憶體中的中繼資料在硬碟上的checkpoint,它是一種序列化的格式,並不能夠在硬碟上直接修改。
同資料的機制相似,當中繼資料節點失敗時,則最新checkpoint的中繼資料資訊從fsimage載入到記憶體中,然後逐一重新執行edit log中的操作。
2.2、secondary namenode的目錄結構
${dfs.name.dir}/current/VERSION /edits /fsimage /fstime /previous.checkpoint/VERSION /edits /fsimage /fstime
secondary namenode就是用來協助namenode將記憶體中的中繼資料資訊checkpoint到硬碟上的。
checkpoint的過程如下:
secondary namenode通知namenode產生新的記錄檔edits.new,以後的日誌都寫到新的記錄檔中。
secondary namenode用http get從中繼資料節點獲得fsimage檔案及舊的記錄檔。
secondary namenode將fsimage檔案載入到記憶體中,並執行記錄檔中的操作,然後產生新的fsimage檔案。
secondary namenode將新的fsimage檔案用http post傳回namenode
namenode可以將舊的fsimage檔案及舊的記錄檔,換為新的fsimage檔案和新的記錄檔(第一步產生的),然後更新fstime檔案,寫入此次checkpoint的時間。
這樣namenode中的fsimage檔案儲存了最新的checkpoint的中繼資料資訊,記錄檔也重新開始,不會變的很大了。
2.3、datanode的目錄結構
${dfs.name.dir}/current/VERSION /blk_<id_1> /blk_<id_1>.meta /blk_<id_2> /blk_<id_2>.meta /... /blk_<id_64> /blk_<id_64>.meta /subdir0/ /subdir1/ /... /subdir63/
blk_<id>儲存的是HDFS的資料區塊,其中儲存了具體的位元據。
blk_<id>.meta儲存的是資料區塊的屬性資訊:版本資訊,類型資訊,和checksum
subdirxx:當一個目錄中的資料區塊到達一定數量的時候,則建立子檔案夾來儲存資料區塊及資料區塊屬性資訊。
資料節點的VERSION檔案格式如下:
namespaceID=1232737062storageID=DS-1640411682-127.0.1.1-50010-1254997319480cTime=0storageType=DATA_NODElayoutVersion=-18
轉自 http://www.cnblogs.com/forfuture1978/archive/2010/03/14/1685351.html