HDFS的架構設計

HDFS爲是Apache Hadoop Core項目的一部分,是Hadoop的核心項目,今天我們就來討論以下關於HDFS架構設計問題。

分佈式

既然HDFS標榜爲一個分佈式文件系統,那首要解決的就是分佈式的問題。分佈式,簡單來說就是分佈在各個節點,這些節點可能在不同的主機上,也可能在不同的數據中心,甚至還可能跨地區,跨國度。各節點之間通過網絡來進行信息交互。DHFS通過Namenode和Datanode來實現分佈式,Namenode在一個節點,Datanode在不同節點,Namenode通過網絡與Datanode來進行數據交互,來管理整個HDFS文件系統。

健壯性

一個文件系統好不好,首要的就是它能否穩定可靠地將數據存儲起來,以供後續利用,是評價一個文件系統首要的指標。

容錯性

在分佈式集羣面前,硬件或網絡方面的錯誤將是常態而非異常情況,因此要提高整個系統的健壯性,就必須充分考慮到這些故障問題。HDFS對每個數據塊都採用了多副本機制,默認的副本系數爲3,意思就是,同一個數據塊,有三個相同的副本,分別存儲在不同的Datanode上,且HDFS採用了機架感知策略來優化副本的存放,一般的方式是:將兩個副本存放在同一機架上的不同Datanode上,另一個副本放在另一個機架上的Datanode上,這樣某個Datanode出現故障,甚至某個機架出現故障,依然不會造成數據的丟失或無法訪問。
每個Datanode都會定期向Namenode發送心跳包,如果由於網絡或系統出現問題,部分Datanode長時間沒有發送心跳包,就表明此Datanode出現問題,Namenode就將此Datanode標記爲宕機,將不再將IO請求發送給此Datanode,與此Datanode相關的數據塊將不再有效,相關塊的副本系數也將減小,從而便於後續的副本複製。

數據完整性

數據塊在傳輸或存儲過程中,出現錯誤的情況必然會出現,對於這種問題,HDFS提供了校驗功能,在數據塊存儲後,會對數據採用CRC32進行校驗,並記錄其校驗值,在客戶端讀取前,會對數據進行校驗,如果檢驗失敗,則表明該數據塊出錯,於是就進行以下步驟:
1. 客戶端將出錯的塊連同所在的Datanode報告給Namenode
2. Namenode將此塊標記爲損壞,這樣防止下次再去讀取此塊,也不會再複製此塊到其他Datanode
3. Namenode將此塊的副本系數減一,以便於後續複製新的塊到其他Datanode
4. Namenode將此處錯的塊刪除。
通過以上四個步驟,基本保證了數據的完整性與可靠性。

海量存儲

HDFS的上層應用往往都是具有很大的數據集,因此支持海量存儲對HDFS來說,是非常必要的。HDFS在存儲數據之前,會將數據進行切分成一個個較小的塊,默認每個塊的大小爲64MB,這樣的實現方式,只要節點足夠多,再大的文件,也可以被存放在HDFS裏面,而不用擔心由於單機文件系統大小的限制或硬盤大小的限制從而造成的無法存儲的情況。

簡單性

HDFS對數據切分,副本複製,數據完整性校驗等的一系列操作,對用戶來說,是完全透明的,用戶在存儲文件過程中,感覺和在一臺機器上存儲文件一樣,完全不用擔心額外的問題。
HDFS採用的是“一次寫入,多次讀取”的簡單模型,且採用流式的數據訪問方式,採用批處理方式,而非交互式的數據訪問方式。

智能性

集羣均衡

當某個Datanode上的存儲容量低於某個臨界值時,按照相應的均衡策略,系統會自動的將數據移動到其他空閒的機器上,從而實現整個集羣裏面的數據存儲均衡。

智能擴容

由於集羣均衡策略的存在,從而可以智能的進行Datanode的擴容,而不用擔心擴容和數據的遷移與均衡問題。

安全模式

Namenode會在啓動時,進入稱之爲安全模式的特殊狀態,處於安全模式時,Namenode不進行數據快的複製,而是根據Datanode發來的心跳信號和狀態報告中,確定每個數據塊的副本系數,從而便於安全模式退出後,副本的複製。

高性能

副本的選擇

爲了提高數據讀取性能,HDFS會優先讓讀取程序讀取離讀取程序最近的Datanode,如果同一機架上有,則就讀取同一機架上的副本,總之,副本的選擇符合“就近原則”。

緩存

當客戶端在寫入數據時,開始會先寫入到本地的臨時文件夾中緩存起來,當臨時文件大於一個塊的大小時,客戶端纔會聯繫Namenode,Namenode分配Datanode數據塊和目標數據塊,然後客戶端會將本地的臨時文件上傳到指定的Datanode的數據塊上,以此循環,直到文件存儲完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章