淺談HDFS架構

1、HDFS 

  HDFS(Hadoop Distributed File System)是Hadoop項目的核心子項目,是分佈式計算中數據存儲管理的基礎,是基於流數據模式訪問和處理超大文件的需求而開發的,可以運行於廉價的商用服務器上。它所具有的高容錯、高可靠性、高可擴展性、高獲得性、高吞吐率等特徵爲海量數據提供了不怕故障的存儲,爲超大數據集(Large Data Set)的應用處理帶來了很多便利

2、HDFS 

  HDFS 源於 Google 在2003年10月份發表的GFS(Google File System) 論文。 

3、HDFS的優缺點

   優點:

  1、高容錯性

  • 數據自動保存多個副本。它通過增加副本的形式,提高容錯性。

  • 某一個副本丟失以後,它可以自動恢復,這是由 HDFS 內部機制實現的,我們不必關心。

  2、適合批處理

  • 它是通過移動計算而不是移動數據。

  • 它會把數據位置暴露給計算框架。

  3、適合大數據處理

  • 處理數據達到 GB、TB、甚至PB級別的數據。

  • 能夠處理百萬規模以上的文件數量,數量相當之大。

  • 能夠處理10K節點的規模。

  4、流式文件訪問

  • 簡化一致性模型,實現一次寫入,多次讀取。文件一旦寫入不能修改,只能追加。

  • 它能保證數據的一致性。

  5、可構建在廉價機器上

  • 它通過多副本機制,提高可靠性。

  • 它提供了容錯和恢復機制。比如某一個副本丟失,可以通過其它副本來恢復。

  缺點:

  1、低延時數據訪問

                 * 比如毫秒級的來存儲數據,這是不行的,它做不到。

                 * 它適合高吞吐率的場景,就是在某一時間內寫入大量的數據。但是                     它在低延時的情況下是不行的,比如毫秒級以內讀取數據,這樣它                     是很難做到的。

  2、小文件存儲

                *存儲大量小文件(這裏的小文件是指小於HDFS系統的Block大小的文                  件(默認64M))的話,它會佔用 NameNode大量的內存來存儲文                      件、目錄和塊信息。這樣是不可取的,因爲NameNode的內存總是有                   限的。

               *小文件存儲的尋道時間會超過讀取時間,它違反了HDFS的設計目                     標。

  3、併發寫入、文件隨機修改

               *一個文件只能有一個寫,不允許多個線程同時寫。

               *僅支持數據 append(追加),不支持文件的隨機修改。

  hdfs的特性:

            * 高容錯,可擴展性及可配置性強

           *  跨平臺

           *  shell命令接口

           * 機架感知功能

           * 負載均衡

           Web界面

4.HDFS存儲數據

 HDFS 採用Master/Slave的架構來存儲數據,這種架構主要由HDFS Client、NameNode、DataNode和Secondary NameNode四個部分組成。

1、Client:就是客戶端。

  • 文件切分。文件上傳 HDFS 的時候,Client 將文件切分成 一個一個的Block,然後進行存儲。

  • 與 NameNode 交互,獲取文件的位置信息。

  • 與 DataNode 交互,讀取或者寫入數據。

  • Client 提供一些命令來管理 HDFS,比如啓動或者關閉HDFS。

  • Client 可以通過一些命令來訪問 HDFS。

  2、NameNode:就是 master,它是一個主管、管理者。

  • 管理 HDFS 的名稱空間

  • 管理數據塊(Block)映射信息

  • 配置副本策略

  • 處理客戶端讀寫請求。


  3、DataNode:就是Slave。NameNode 下達命令,DataNode 執行實際的操作。

  • 存儲實際的數據塊。

  • 執行數據塊的讀/寫操作。

  4、Secondary NameNode:並非 NameNode 的熱備。當NameNode 掛掉的時候,它並不能馬上替換 NameNode 並提供服務。

  • 輔助 NameNode,分擔其工作量。

  • 定期合併 fsimage和fsedits,並推送給NameNode。

  • 在緊急情況下,可輔助恢復 NameNode。

工作流程:

           secondarynamenode通知namenode切換edits文件

           secondarynamenode從namenode獲得fsimage和edits(通過http)

           secondarynamenode將fsimage載入內存,然後開始合併edits

           secondarynamenode將新的fsimage發回給namenode

           namenode用新的fsimage替換舊的fsimage

5.數據損壞處理

         * 當DN(DataNode)讀取block的時候,它會計算checksum;

         * 如果計算後的checksum,與block創建時值不一樣,說明該block已經損壞。

         * client讀取其它DN上的block;NN(NameNode)標記該塊已經損壞,然後複製block達到預期設置的文件備份數;

         * DN在其文件創建後三週驗證其checksum。



   關注大數據and機器學習公衆號,一起開創未來。

CLbigdata


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章