Hadoop4-HDFS分佈式文件系統原理

1、簡介

  一、分佈式文件系統集羣結構

    分佈式文件系統由計算機集羣中的多個節點構成,這些節點分爲兩類:html

    主節點(MasterNode)或者名稱節點(NameNode)node

    從節點(Slave Node)或者數據節點(DataNode)shell

  二、HDFS可以帶來什麼好處

    兼容廉價的硬件設備數據庫

    流數據讀寫編程

    大數據集安全

    簡單的文件模型服務器

    強大的跨平臺兼容性網絡

  三、侷限性

    不適合低延遲數據訪問數據結構

    沒法高效存儲大量小文件tcp

    不支持多用戶寫入節任意修改文件

2、概念

  一、塊

    HDFS默認一個塊64MB,一個文件被分紅多個塊,以塊爲存儲單位,2.x新版本中是128MB

    塊的大小遠大於普通文件系統,能夠最小化尋找開銷

    HDFS採用抽象的塊概念能夠帶來一下幾個明顯的好處:

      支持大規模文件存儲:文件以塊爲單位進行存儲,一個大規模文件能夠被分拆成若干各文件塊,不一樣文件塊被分發到不一樣節點,所以,一個文件的大小不會受到單個節點存儲容量限制,能夠遠大於網絡中任意節點的存儲容量

      簡化系統設計:簡化了存儲管理,由於文件塊大小固定,這樣能夠很是容易算出一個幾點能夠存儲多少塊,其次方便了元數據的管理,元數不須要和文件塊一塊兒存儲,能夠由其餘系統負載管理元數據

      適合數據備份:每一個文件塊均可以冗餘存儲到多個節點上,提升了系統容錯和可用性

   二、名稱節點

    名稱節點負責管理分佈式文件系統的命令空間(Namespace),保存了兩個核心的數據結構,即Fslmage和EditLog

      Fslmage用於維護文件系統樹以及文件樹中全部的文件和文件夾的元數據

      操做日誌文件EditLog中記錄了全部針對文件的建立、刪除、重命名等操做

      名稱節點記錄了每一個文件中個板塊所在的數據節點的位置信息

        

  三、Fslmage文件

    Fslmage文件包含文件系統中全部目錄和文件inode的序列化形式,每一個inode是一個文件或目錄的元數據內部表示,幷包含此類信息:文件的複製等級、修改和訪問時間、訪問權限、塊大小以及組成文件的塊。對於目錄,則存儲修改時間、權限和配額元數據

    Fslmage文件沒有記錄塊存儲在哪一個數據節點。而是由名稱節點把這些映射保留在內存中,當數據節點加入HDFS集羣時,數據節點會把本身所包含的塊列表告知給名稱節點,此後會按期執行這種告知操做,以確保名稱節點的塊映射時最新的

  四、名稱節點的啓動過程

    1)啓動名稱節點---》將FsImage文件---》加載到內存---》執行EditLog---》同步---》內存中的元數據客戶可讀

    2)內存與元數據映射完成---》建立新的Fslmage文件+空的Editlog文件

    說明:名稱節點起來後,HDFS中的更新操做會從新寫到Editlog文件中,由於Fslmage文件通常都很大(GB級別的很常見),若是全部的更新操做都往Fslmage文件中添加,這樣會致使系統運行的十分緩慢,可是,若是往EditLog文件裏面寫就不會這樣,由於EditLog要小不少,每次執行寫操做以後,且在向客戶端發送成功代碼以前,edits文件都須要同步更新

  五、名稱節點運行期間EditLog不斷變大的問題

    運行期間HDFS的全部操做---》寫到EditLog---》時間(長此以往)---》EditLog文件將變得很是大

    對運行中HDFS影響不大,可是一旦重啓Fslmage裏面的全部內容映像到內存中,而後在一條一條執行EditLog,當EditLog文件很是大的時,就會致使名稱節點啓動很是緩慢,而且此期間是安全模式,沒法提供寫操做,影響用戶使用

    解決此問題就須要SecondaryNameNode第二名稱節點

  六、第二名稱節點SecondaryNameNode

    1)它用來保存名稱節點中對HDFS元數據信息的備份,並減去名稱節點重啓的時間,通常是單獨運行在一臺機器上

    2)SecondaryNameNode工做狀況

      一、SecondaryNameNode按期於NameNode通訊,請求中止使用EditLog文件,暫時將新的寫操做寫到要給新的文件edit.new,此操做瞬間完成,上層寫日誌函數感受不到差異

      二、SecondaryNameNode經過HTTP GEt從NameNode上獲取FsImage/EditLog文件下載到本地的相應目錄下

      三、SecondaryNameNode將下載的Fslmage載入內存而後一條條執行EditLog中的操做,使得內存中的Fslmage保持最新,這個就是EditLog和FsImage文件合併

      四、SecondaryNameNode執行完合併會經過post方式將新的FsImage文件發送到NameNode節點

      五、NameNode將從SecondaryNameNode接收到的新的FsImage替換就的FsImage文件,同時將edit.new替換EditLog文件,這時EditLog就變小了

 

  七、數據節點DataNode

    數據分佈在各節點,數據節點負責數據的存儲和讀取,會根據客戶端或名稱節點的調度進行數據的存儲和檢索,而且向名稱節點按期發送所存儲的塊的列表

 

3、體系結構

   HDFS採用了主從(M/S)結構模型,名稱節點做爲中心服務器,管理文件系統的命名空間即客戶端文件的訪問。數據節點負責進行客戶端的讀/寫請求,在名稱節點的調度嚇進行數據的建立、刪除、複製操做

  一、命名空間

    HDFS的命名空間包含目錄、文件、塊

    HDFS使用傳統的分級文件體系,所以,能夠像使用普通文件系統同樣,建立/刪除目錄和文件,及在目錄間轉移重命名等

  二、通訊協議

    HDFS通訊協議都是構建在TCP/IP協議基礎之上

    客戶端經過一個可配置端口向名稱節點發起tcp連接,並使用客戶端協議與名稱節點進行交互

    名稱節點和數據節點間使用數據節點協議進行交互

    客戶端與數據節點的交互是經過RPC(Remote Procedure Call)來實現的。在設計上,名稱節點不會主動發起RPC,而是響應來自客戶端和數據節點的RPC請求

  三、客戶端

    客戶端就是用戶操做HDFS的方式,HDFS在部署時都提供了客戶端

    HDFS客戶端時一個庫,包括HDFS文件系接口,這些接口隱藏了HDFS實現中的大部分複雜性

    嚴格來講客戶端並非HDFS的一部分

    客戶端支持打開、讀寫、寫入等常見的操做,而且提供了相似shell的命令行方式來訪問HDFS中的數據

    HDFS也提供了Java API,做爲應用程序訪問文件系統的客戶端編程接口

  四、侷限性

    HDFS只設置了一個名稱節點,這樣作的好處時簡化系統設計,可是也帶了侷限性:

    1)命名空間的限制:名稱節點時保持在內存中,所以名稱節點可以容納對象(文件、塊)的個數會收到內存大小限制

    2)性能瓶頸:整個分佈式文件系統的吞吐量,受限單個名稱節點的吞吐量

    3)隔離問題:因爲集羣中只有一個名稱節點,只有一個命名空間,所以,沒法對不一樣應用程序進行隔離

    4)集羣的可用性:一旦惟一的名稱節點發送故障,整個集羣不可用

4、存儲原理

  一、冗餘數據保存

    HDFS採用了多副本方式對數據進行冗餘,多副本方式優勢:

    1)加快數據傳輸速度

    2)容易檢查數據錯誤

    3)保證數據可靠性

  二、數據存取策略

    1)數據存放

    第一個副本:放在上傳文件的數據節點,若是集羣外提交,隨機選一臺磁盤不太滿、cpu不太忙的節點

    第二個副本:放置在與第一個副本不一樣的機架的節點上

    第三個副本:與第一個副本相同機架的其餘節點上

    更多副本:隨機

  三、數據讀寫

  hdfs提供了一個API能夠肯定一個數據節點所屬的機架ID,客戶端也能夠調用API獲取本身所屬機架ID

  當客戶端讀取數據時,名稱節點得到數據塊不一樣的位置列表,列表中包含了副本所在數據節點,發現某個數據數據庫副本對應的機架ID和客戶端對應機架ID相同,就優先選擇該副本讀取數據,如沒有就隨機讀取

  四、容錯-數據錯誤與恢復

    HDFS具備較高的容錯性,能夠兼容廉價硬件,它把依你高見出錯看做一種常態,還有機制檢測數據錯誤和自動恢復,容錯性主要由名稱節點出錯、數據節點出錯、數據出錯。

    1)名稱節點出錯

      回顧:Fslmage,Editlog

      若是整個兩個文件損壞,那麼HDFS實例將失效

      hdfs提供SecondaryNameNode,將會備份這兩個文件,在必要的時候Fslmage,Editlog數據進行恢復

    2)數據節點出錯

      心跳信息按期向名稱節點報告本身狀態,若是出問題,就會被標記爲宕機,節點上的數據被標記不可讀,名稱節點將不會給他們發送任何I/O請求

      如出現問題,一些數據節點不可用可能會致使一些數據庫副本數量小於冗餘因子,名稱節點會按期進行檢測,一旦發生這種狀況會啓動數據冗餘複製,爲它生成新的副本

      HDFS和其餘分佈式文件系統最大的區別就是能夠調整冗餘數據位置

    3)數據出錯

    由網絡磁盤等錯誤的因素都會致使數據錯誤,客戶端讀取到數據後都會進行md5/sha1對數據進行校驗,以肯定讀取到正確的數據

    在建立文件時,客戶端會對每一個文件進行信息摘錄,並把這些信息寫入到一個路徑的隱藏文件

    客戶端讀取文件時,先讀取信息摘錄,而後利用該信息進行校驗,若是出錯,客戶端就會請求到另外的節點讀取,並向名稱節點報告,名稱節點會按期檢測而且從新複製

 

5、數據讀取過程

  一、讀取文件

    簡單流程就是:打開文件--》獲取數據塊信息--》讀取請求--》讀取數據--》獲取數據塊信息--》讀取數據--》關閉文件

  二、寫數據過程

 

    簡單流程:建立文件--》建立文件元數據--》寫入數據--》--》寫入數據包--》接收確認包--》關閉文件--》寫操做完成

 

徹底參考學習:http://dblab.xmu.edu.cn/blog/290-2/ 

 

轉載請註明出處:http://www.javashuo.com/article/p-dkqkpila-y.html

相關文章
相關標籤/搜索