HDFS的基本概念(轉)


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 2012
namespaceID=1555019963
cTime=0
storageType=NAME_NODE
layoutVersion=-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=1232737062
storageID=DS-1640411682-127.0.1.1-50010-1254997319480
cTime=0
storageType=DATA_NODE
layoutVersion=-18

 

 

轉自 http://www.cnblogs.com/forfuture1978/archive/2010/03/14/1685351.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM