Hadoop學習之路(二)HDFS基礎

1.HDFS前言

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

設計思想

  • 分散均勻存儲 dfs.blocksize = 128M
  • 備份冗餘存儲 dfs.replication = 3

在大數據系統中做用

爲各種分佈式運算框架(如:MapReduce,spark,hive.....)提供數據存儲服務。
hadoop生態圈.png數據庫

重點概念

數據切塊、副本存放、元數據安全

2.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結構.png

如上圖所示,HDFS也是按照Master和Slave的結構。分爲NameNode(NN)、SecondaryNameNode、DataNode(DN)這幾個角色。網絡

NameNode:名稱節點。框架

  • 是HDFS的主節點、管理員。
  • 是接收客戶端(命令行、Java API程序 )的請求:建立目錄、上傳數據、下載數據、刪除數據等等。
  • 管理和維護HDFS的日誌和元信息

DataName:數據節點。 負責存儲client發來的數據庫block;執行數據塊的讀寫操做。分佈式

SecondaryNameNode:是NameNode的冷備份;合併fsimage和fsedits而後再發給namenodeoop

  • 熱備份:b是a的熱備份。若是a壞掉,那麼b立刻運做代替a的工做。
  • 冷備份:b是a的冷備份。若是a壞掉,那麼b上存儲a的一些信息,減小a壞掉以後的損失。

fsimage:元數據鏡像文件(文件系統的目錄樹)
edits:元數據的操做日誌(針對文件系統作的修改操做記錄)
namenode內存中存儲的是=fsimage+edits。
SecondaryNameNode負責定時默認1小時,從namenode上,獲取fsimage和edits來進行合併,而後在發送給namenode,減小namenode的工做量。性能

HDFS的侷限性

1.低延時數據訪問。在yoghurt交互性的應用上,應用須要在ms或者幾個s的時間內獲得響應。因爲HDFS爲高吞吐率作了設計,也所以犧牲了快速響應。對於低延時的應用,能夠考慮HBase或者Cassandra。
2.大量的小文件。標準的HDFS數據塊的大小是128M(2.x),存儲小文件並不會浪費實際的存儲空間,可是無疑會增長在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做用均沒法讀寫查看文件。

解決方法 [Hadoop HA(High Availability) ]

1.啓動一個擁有文件系統元數據的新NameNode(這個通常不採用,由於複製元數據很是消耗時間)。 2.配置一對活動-備用(Active-Standby)NameNode,活動NameNode失效時,備用NameNode當即接管,用戶不會有明顯中斷的感受。

相關文章
相關標籤/搜索