Hadoop學習之路(六)HDFS基礎

中午君發表於2019-01-23

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也是按照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失效問題,該機制對使用者透明


相關文章