Hadoop學習之路(六)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也是按照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失效問題,該機制對用戶透明

 


免責聲明!

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



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