第六章 HDFS 基礎

HDFS前言

HDFS:Hadoop Distributed File System ,Hadoop 分佈式文件系統,主要用來解決海量數據的存儲問題。


設計思想

1、分散均勻存儲 dfs.blocksize = 128M

2、備份冗餘存儲 dfs.replication = 3


在大數據系統中作用

為各類分佈式運算框架(如:mapreduce,spark,tez,……)提供數據存儲服務。


重點概念

文件切塊,副本存放,元數據


HDFS的概念和特性


概念

首先,它是一個文件系統,用於存儲文件,通過統一的命名空間——目錄樹來定位文件

其次,它是分佈式的,由很多服務器聯合起來實現其功能,集群中的服務器有各自的角色;


重要特性

(1)HDFS中的文件在物理上是分塊存儲(block),塊的大小可以通過配置參數( dfs.blocksize)來規定,默認大小在hadoop2.x版本中是128M,老版本中是64M

(2)HDFS文件系統會給客戶端提供一個統一的抽象目錄樹,客戶端通過路徑來訪問文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data

(3)目錄結構及文件分塊信息(元數據)的管理由namenode節點承擔

——namenode 是 HDFS 集群主節點,負責維護整個 hdfs 文件系統的目錄樹,以及每一個路徑(文件)所對應的block 塊信息(block的id,及所在的 datanode 服務器)

(4)文件的各個 block 的存儲管理由 datanode 節點承擔

---- datanode 是 HDFS 集群從節點,每一個 block 都可以在多個 datanode 上存儲多個副本(副本數量也可以通過參數設置dfs.replication)

(5)HDFS是設計成適應一次寫入,多次讀出的場景,且不支持文件的修改

注:適合用來做數據分析,並不適合用來做網盤應用,因為,不便修改,延遲大,網絡開銷大,成本太高。


圖解HDFS

通過上面的描述我們知道,hdfs很多特點:

  保存多個副本,且提供容錯機制,副本丟失或宕機自動恢復(默認存3份)。

  運行在廉價的機器上

  適合大數據的處理。HDFS默認會將文件分割成block,,在hadoop2.x以上版本默認128M為1個block。然後將block按鍵值對存儲在HDFS上,並將鍵值對的映射存到內存中。如果小文件太多,那內存的負擔會很重。

第六章 HDFS 基礎

如上圖所示,HDFS也是按照Master和Slave的結構。分NameNode、SecondaryNameNode、DataNode這幾個角色。 NameNode:是Master節點,是大領導。管理數據塊映射;處理客戶端的讀寫請求;配置副本策略;管理HDFS的名稱空間; SecondaryNameNode:是一個小弟,分擔大哥 namenode 的工作量;是 NameNode 的冷備份;合併fsimage 和 fsedits 然後再發給 namenode。 DataNode:Slave節點,奴隸,幹活的。負責存儲 client 發來的數據塊 block;執行數據塊的讀寫操作。 熱備份:b是a的熱備份,如果a壞掉。那麼b馬上運行代替a的工作。 冷備份:b是a的冷備份,如果a壞掉。那麼b不能馬上代替a工作。但是b上存儲a的一些信息,減少a壞掉之後的損失。 fsimage:元數據鏡像文件(文件系統的目錄樹。) edits:元數據的操作日誌(針對文件系統做的修改操作記錄) namenode內存中存儲的是=fsimage+edits。 SecondaryNameNode負責定時默認1小時,從namenode上,獲取fsimage和edits來進行合併,然後再發送給namenode。減少namenode的工作量。


HDFS的侷限性

1)低延時數據訪問

在用戶交互性的應用中,應用需要在 ms 或者幾個s的時間內得到響應。由於 HDFS 為高吞吐率做了設計,也因此犧牲了快速響應。對於低延時的應用,可以考慮使用 HBase 或者 Cassandra。

2)大量的小文件

標準的 HDFS 數據塊的大小是 64M,存儲小文件並不會浪費實際的存儲空間,但是無疑會增加了在 NameNode上的元數據,大量的小文件會影響整個集群的性能。

前面我們知道,Btrfs為小文件做了優化-inline file,對於小文件有很好的空間優化和訪問時間優化。

3)多用戶寫入,修改文件

HDFS 的文件只能有一個寫入者,而且寫操作只能在文件結尾以追加的方式進行。它不支持多個寫入者,也不支持在文件寫入後,對文件的任意位置的修改。 ​ 但是在大數據領域,分析的是已經存在的數據,這些數據一旦產生就不會修改,因此,HDFS 的這些特性和設計侷限也就很容易理解了。HDFS 為大數據領域的數據分析,提供了非常重要而且十分基礎的文件存儲功能。


HDFS保證可靠性的措施


1)冗餘備份

每個文件存儲成一系列數據塊(Block)。為了容錯,文件的所有數據塊都會有副本(副本數量即複製因子,課配置)(dfs.replication)

2)副本存放

採用機架感知(Rak-aware)的策略來改進數據的可靠性、高可用和網絡帶寬的利用率

3)心跳檢測

NameNode週期性地從集群中的每一個DataNode接受心跳包和塊報告,收到心跳包說明該DataNode工作正常

4)安全模式

    系統啟動時,NameNode會進入一個安全模式。此時不會出現數據塊的寫操作。

5)數據完整性檢測

    HDFS客戶端軟件實現了對HDFS文件內容的校驗和(Checksum)檢查(dfs.bytes-per-checksum)。 


單點故障(單點失效)問題


單點故障問題

  如果NameNode失效,那麼客戶端或MapReduce作業均無法讀寫查看文件


解決方案

  1)啟動一個擁有文件系統元數據的新NameNode(這個一般不採用,因為複製元數據非常耗時間)

  2)配置一對活動-備用(Active-Sandby)NameNode,活動NameNode失效時,備用NameNode立即接管,用戶不會有明顯中斷感覺。

  • 共享編輯日誌文件(藉助NFS、zookeeper等)
  • DataNode 同時向兩個 NameNode 彙報數據塊信息
  • 客戶端採用特定機制處理 NameNode 失效問題,該機制對用戶透明


分享到:


相關文章: