[HDFS_1] HDFS 的概念和特性



 

0. 參考

 

  HDFS你一定要知道,要考的

  大數據開發實戰:HDFS和MapReduce優缺點分析

  SecondaryNamenode的作用詳解

 


 

1. HDFS 是什么

   HDFS :一種分布式文件系統,可提供對應用程序數據的高吞吐量訪問,解決海量數據存儲問題。

 

 


 

2. HDFS 產生的背景 & 設計前提 

  隨着互聯網的發展,數據產生的數量越來越大,速度越來越快。傳統的文件系統所依賴的服務器價格昂貴,提高其處理性能成本較高且已達到技術瓶頸,縱向擴展並不符合當今需求。

  HDFS 它的設計目標就是把超大的數據集存儲到多台普通計算機上(橫向擴展),並且可以提供高可靠性和高吞吐量的服務,支持通過添加節點的方式對集群進行擴容。所以 HDFS 有着它自己的設計前提:

 

  對存儲大文件支持很好,不適用於存儲大量小文件
  通過流式訪問數據,保證高吞吐量而不是低延時的用戶響應
  簡單一致性,使用場景應為一次寫入多次讀取,不支持多用戶寫入,不支持任意修改文件。
  冗余備份機制,空間換可靠性(Hadoop3中引入糾刪碼機制,糾刪碼需通過計算恢復數據,實為通過時間換空間,有興趣的可以查看 RAID 的實現)
  移動計算優於移動數據,為支持大數據處理主張移動計算優於移動數據,提供相關接口。

 


 

3. HDFS 的優缺點

 

  3.1 HDFS 的優點

  HDFS 被設計成適合運行在通用和廉價硬件上的分布式文件系統。它和現有的分布式文件系統有很多共同點,但他和其它分布式文件系統的區別也是明顯的。HDFS 是基於流式數據模式訪問和處理超大文件的需求而開發的,其主要特點如下:

 

  【1. 處理超大文件】

  這里的超大文件通常指的是 GB、TB 甚至 PB 大小的文件。通過將超大文件拆分為小的 HDFS,並分配給數以百計、千計甚至萬計的的節點,Hadoop 可以很容易地擴展並處理這些超大文件。

 

  【2. 運行於廉價的商用機器集群上】

  HDFS 設計對硬件需求比較低,只需運行在低廉的的商用機器集群上,而無須使用昂貴的高可用機器。在設計 HDFS 時要充分考慮數據的可靠性、安全性和高可用性。

 

  【3. 高容錯性和高可靠性】

  HDFS 設計中就考慮到低廉硬件的不可靠性,一份數據會自動保存多個副本(具體可用設置,通常三個副本),通過增加副本的數量來保證它的容錯性。如果某一個副本丟失,HDFS 會自動復制其它機器上的副本。

  當然,有可能多個副本都會出現問題,但是 HDFS 保存的時候會自動跨節點和跨機架,因此這種概率非常低,HDFS 同時也提供了各種副本放置策略來滿足不同級別的容錯需求。

 

  【4. 流式的訪問數據】

  HDFS 的設計建立在更多低相應 “一次寫入,多次讀寫” 任務的基礎上,這意味着一個數據集一旦有數據源生成,就會被復制分發到不同的存儲節點中,然后響應各種各種的數據分析任務需求。在多數情況下,分析任務都會涉及數據集的大部分數據,也就是說,對 HDFS 來說,請求讀取整個數據集比請求讀取單條記錄會更加高效。

 


 

  3.2 HDFS 的缺點

 

  HDFS 的上述種種特點非常適合於大數據量的批處理,但是對於一些特點問題不但沒有優勢,而且有一定的局限性,主要表現以下幾個方面:

 

  【1. 不適合低延遲數據訪問】

  如果要處理一些用戶要求時間比較短的低延遲應用請求(比如毫秒級、秒級的響應時間),則 HDFS 不適合。HDFS 是為了處理大型數據集而設計的,主要是為了達到高的數據吞吐量而設計的,延遲時間通常是在分鍾乃至小時級別。

  對於那些有低延遲要求的應用程序,HBase 是一個更好的選擇,尤其是對於海量數據集進行訪問要求毫秒級響應的情況,單 HBase 的設計是對單行或少量數據集的訪問,對 HBase 的訪問必須提供主鍵或主鍵范圍。

 

  【2. 無法高效存儲大量小文件】

 

  【3. 不支持多用戶寫入和隨機文件修改】

  在 HDFS 的一個文件中只有一個寫入者,而且寫操作只能在文件末尾完成,即只能執行追加操作。

 


 

 4. HDFS 架構

 

  【HDFS 架構圖 】

 

  

 

  HDFS  負責分布式存儲。

  HDFS 采用了主從(Master/Slave)的結構模型,一個 HDFS 集群是由一個 NameNode 和若干個 DataNode 組成的。

 

  1. HDFS Client

  客戶端可以通過一些命令訪問 HDFS,通過訪問 NameNode 獲取文件的元數據信息,與 DataNode 交互讀取文件。

  客戶端同時負責對文件的切分,在文件上傳時,客戶端將文件切分成Block進行存儲。

 

  2. NameNode

  NameNode 作為 Master,用於存儲文件的元數據信息(文件類型、大小、路徑、權限等),它也負責數據塊到具體 DataNode 的映射。

  NameNode 執行文件系統的命名空間操作,比如打開、關閉、重命名文件或目錄等。

  

  3. DataNode

  DataNode 作為 Slave,負責處理文件系統客戶端的文件讀寫請求,並在 NameNode 的統一調度下進行數據塊的創建、刪除和復制工作。

  集群中 DataNode 管理存儲的數據。HDFS 允許用戶以文件的形式存儲數據。從內部來看,文件被分成若干數據塊,而且這若干個數據塊存放在一組 DataNode 上。

 

  4. Secondary NameNode

  Secondary NameNode 作為 NameNode 的輔助節點,在 NameNode 無法正常運行的情況下輔助 NameNode 恢復。

  他的主要任務是合並 NameNode 的 edit logs 到 fsimage 文件中。

 


 

 4. HDFS 文件塊(Block)的大小

  Hadoop1.x 的 HDFS 默認塊大小為 64MB;Hadoop2.x 的默認塊大小為 128MB。

  塊大小為什么是128M?

  1. 機械硬盤尋道時間 10ms
  2. 尋道時間占用讀取時間的 1%
  3. 讀取時間 1s
  4. 鑒於機械硬盤速度 100M/s ===> 128M   //一代的塊大小是64M

 

 


 

5. 補充 

  HDFS 以六十數據訪問模式來存儲大文件

 

  1. 流式訪問:從文件頭讀到文件尾
  2. 隨機訪問:在文件的任意位置進行訪問


  Hadoop 不推薦存儲大量的小文件:

  1.  每一個文件都占用元數據空間,此數據是會在啟動時候加載到內存,大量小文件會大大占用 NameNode的內存性能
  2.  在分布式處理方面,每個小文件都會占用 Yarn 的一個進程資源,所以在處理時會產生非常多的 Yarn 進程,占用內存性能

  Hadoop 在同一個文件中同時只能支持一個寫入者

 


 


免責聲明!

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



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