Hadoop學習之路(二)HDFS基礎

1.HDFS前言

HDFS:Hadoop Distributed File System,Hadoop分布式文件系統(tǒng),主要用來解決海量數(shù)據(jù)的存儲問題。

設計思想

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

在大數(shù)據(jù)系統(tǒng)中作用

為各類分布式運算框架(如:MapReduce,spark,hive.....)提供數(shù)據(jù)存儲服務。


hadoop生態(tài)圈.png

重點概念

數(shù)據(jù)切塊、副本存放、元數(shù)據(jù)

2.HDFS的概念和特性

概念
  • 首先,它是個文件系統(tǒng)。用于存儲文件,通過統(tǒng)一的命名空間——目錄樹來定位文件。
  • 其次,它是分布式的。由很多服務器聯(lián)合起來實現(xiàn)其功能,集群中的服務器有各自的角色。

重要特性

  1. HDFS中的文件在物理上是分塊存儲(block),塊的大小可以通過配置參數(shù)(dfs.blocksize)來規(guī)定,默認大小在hadoop2.x版本中是128M,老版本中是64M。
  2. HDFS文件系統(tǒng)會給客戶端提供一個統(tǒng)一的抽象目錄樹,客戶端通過路徑來訪問文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data
  3. 目錄結(jié)構(gòu)及文件分塊信息(元信息)的管理由NameNode結(jié)點承擔
  • namenode是HDFS集群主節(jié)點,負責維護整個hdfs文件系統(tǒng)的目錄樹,以及每一個路徑(文件)所對應的block塊信息(block的id,及其所在的datanode服務器)
  1. 文件的各個block的存儲管理由datanode結(jié)點承擔。
    datanode是HDFS集群從結(jié)點,每一個block都可以在多個datanode上存儲多個副本,副本數(shù)量也可以通過參數(shù)設置(dfs.replication)
    5.HDFS是設計成適應一次寫入,多次讀出的場景,且不支持文件的修改。
    注:適合用來做數(shù)據(jù)分析,并不適合用來做網(wǎng)盤應用,因為不便修改,延遲大,網(wǎng)絡開銷大,成本太高

圖解HDFS

通過上面的描述,hdfs有很多特點:

  • 保存多個副本,且提供容錯機制,副本丟失或宕機自動恢復。(默認存3份)
  • 運行在廉價的機器上
  • 適合大數(shù)據(jù)的處理。HDFS默認會將文件分割成block,在hadoop2.x以上版本默認128M為1個block。然后將block按照鍵值對的方式存儲在HDFS上,并將鍵值對的映射存儲到內(nèi)存中。如果小文件太多,那內(nèi)存的負擔會很重。


    HDFS結(jié)構(gòu).png

如上圖所示,HDFS也是按照Master和Slave的結(jié)構(gòu)。分為NameNode(NN)、SecondaryNameNode、DataNode(DN)這幾個角色。

NameNode:名稱節(jié)點。

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

DataName:數(shù)據(jù)節(jié)點。 負責存儲client發(fā)來的數(shù)據(jù)庫block;執(zhí)行數(shù)據(jù)塊的讀寫操作。

SecondaryNameNode:是NameNode的冷備份;合并fsimage和fsedits然后再發(fā)給namenode

  • 熱備份:b是a的熱備份。如果a壞掉,那么b馬上運作代替a的工作。
  • 冷備份:b是a的冷備份。如果a壞掉,那么b上存儲a的一些信息,減少a壞掉之后的損失。

fsimage:元數(shù)據(jù)鏡像文件(文件系統(tǒng)的目錄樹)
edits:元數(shù)據(jù)的操作日志(針對文件系統(tǒng)做的修改操作記錄)
namenode內(nèi)存中存儲的是=fsimage+edits。
SecondaryNameNode負責定時默認1小時,從namenode上,獲取fsimage和edits來進行合并,然后在發(fā)送給namenode,減少namenode的工作量。

HDFS的局限性

1.低延時數(shù)據(jù)訪問。在yoghurt交互性的應用上,應用需要在ms或者幾個s的時間內(nèi)得到響應。由于HDFS為高吞吐率做了設計,也因此犧牲了快速響應。對于低延時的應用,可以考慮HBase或者Cassandra。
2.大量的小文件。標準的HDFS數(shù)據(jù)塊的大小是128M(2.x),存儲小文件并不會浪費實際的存儲空間,但是無疑會增加在NameNode上的元數(shù)據(jù)。大量的小文件會影響整個集群的性能。
Btrfs為小文件做了優(yōu)化-inline file,對于小文件有很好的空間優(yōu)化和訪問時間優(yōu)化。
3.多用戶寫入、修改文件。HDFS的文件只能有一個寫入者,而且寫操作只能在文件結(jié)尾以追加的方式進行。它并不支持多個寫入者,也不支持在文件寫入后,對文件的任意位置的修改。

但是在大數(shù)據(jù)領域,分析的是已經(jīng)存在的數(shù)據(jù)。這些數(shù)據(jù)一旦產(chǎn)生就不會修改。因此,HDFS的這些特性和設計的局限也就容易理解了。HDFS為大數(shù)據(jù)領域的數(shù)據(jù)分析,提供了非常重要而且十分基礎的文件存儲功能。

HDFS 保證可靠性的措施

1.冗余備份:每個文件存儲成一系列數(shù)據(jù)塊(Block)。為了容錯,文件的所有數(shù)據(jù)塊都會有副本(副本數(shù)量即復制因子,dfs.replication)。
2.副本存放:采用機架感知(Rak-aware)的策略來改進數(shù)據(jù)的可靠性、高可用和網(wǎng)絡帶寬的利用率。
3.心跳檢測:NameNode周期性地從集群種的每一個DataNode接收心跳包和塊報告,收到心跳包說明該DataNode工作正常。
4.安全模式:系統(tǒng)啟動時,NameNode會進入安全模式。此時不允許出現(xiàn)數(shù)據(jù)塊的寫操作。
5.數(shù)據(jù)完整性檢測:HDFS客戶端軟件實現(xiàn)了對HDFS文件內(nèi)容的校驗(CheckSum)和檢查(dfs.bytes-per-checksum)。

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

單點故障問題

如果NameNode失效,那么客戶端或者MapReduce作用均無法讀寫查看文件。

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

1.啟動一個擁有文件系統(tǒng)元數(shù)據(jù)的新NameNode(這個一般不采用,因為復制元數(shù)據(jù)非常消耗時間)。
2.配置一對活動-備用(Active-Standby)NameNode,活動NameNode失效時,備用NameNode立即接管,用戶不會有明顯中斷的感覺。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容