HDFS技術原理

  1. HDFS概述及應用場景
  2. HDFS在FusionInsight產品的位置
  3. HDFS系統架構
  4. 關鍵特性介紹

HDFS概述及應用場景舉例

HDFS(Hadoop Distributed File System)基於Google發佈的GFS論文設計開發,運行在通用硬件上的分佈式文件系統。其除具備其它分佈式文件系統相同特性外,還有自己特有的特性:
 高容錯性:認爲硬件總是不可靠的
 高吞吐量:爲大量數據訪問的應用提供高吞吐量支持 大文件存儲:支持存儲TB-PB級別的數據

HDFS適合做什麼?大文件存儲、流式數據訪問
HDFS不適合做什麼?大量小文件、隨機寫入、低延遲讀取

HDFS是Hadoop技術框架中的分佈式文件系統,對部署在多臺獨立物理機器上的文件進行管理。可應用於以下幾種場景:
 網站用戶行爲數據存儲
 生態系統數據存儲
 氣象數據存儲

2、HDFS在FusionInsight產品的位置

系統設計目標

硬件失效

 硬件的異常比軟件的異常更加常見。
 對於有上百臺服務器的數據中心來說認爲總有服務器異常,硬件異常是常態。
 HDFS需要監測這些異常,並自動恢復數據。

流式數據訪問

 基於HDFS的應用僅採用流式方式讀數據。
 運行在HDFS上的應用並非以通用業務爲目的的應用程序。 應用程序關注的是吞吐量,而非響應時間。
 非POSIX標準接口的數據訪問。

存儲數據較大

 運行在HDFS的應用程序有較大的數據需要處理。
 典型的文件大小爲GB到TB級別。

數據一致性

 應用程序採用WORM(Write Once Read Many)的數據讀寫模型。
 文件僅支持追加,而不允許修改。

多硬件平臺

 HDFS可運行在不同的硬件平臺上。

移動計算能力

 計算和存儲採用就近原則,計算離數據最近。
 就近原則將有效減少網絡的負載,降低網絡擁塞。

3、基本系統架構

HDFS架構包含三個部分:NameNode,DataNode,Client
 NameNode:NameNode用於存儲、生成文件系統的元數據。運行一個實例。
 DataNode:DataNode用於存儲實際的數據,將自己管理的數據塊上報給NameNode ,運行多個實例。
 Client:支持業務訪問HDFS, 從NameNode ,DataNode獲取數據返回給業務。多個實例,和業務一起運行。

4、關鍵特性介紹

HDFS架構關鍵設計

HDFS數據讀取流程

 

HDFS數據讀取流程如下:

  1. 業務應用調用HDFS Client提供的API打開文件。
  2. HDFS Client聯繫NameNode,獲取到文件信息(數據塊、DataNode位置信息)。
  3. 業務應用調用read API讀取文件。
  4. HDFS Client根據從NameNode獲取到的信息,聯繫DataNode,獲取相應的數據塊。(Client採用就近原則讀取數據)。
  5. HDFS Client會與多個DataNode通訊獲取數據塊。
  6. 數據讀取完成後,業務調用close關閉連接。

HDFS數據寫入流程

  1. 業務應用調用HDFS Client提供的API創建文件,請求寫入。
  2. HDFS Client聯繫NameNode,NameNode在元數據中創建文件節點。3. 業務應用調用write API寫入文件。
  3. HDFS Client收到業務數據後,從NameNode獲取到數據塊編號、位置信息後,聯繫DataNode,並將需要寫入數據的DataNode建立起流水線,完成後,客戶端再通過自有協議寫入數據到DataNode1,再由DataNode1複製到DataNode2, DataNode3。
  4. 寫完的數據,將返回確認信息給HDFS Client。
  5. 所有數據確認完成後,業務調用HDFS Client關閉文件。
  6. 業務調用close,flush後HDFS Client聯繫NameNode,確認數據寫完成,NameNode持久化元數據。

HDFS聯邦(Federation)

數據副本機制

副本距離計算公式:
 Distance(Rack1/D1, Rack1/D1)=0 同一臺服務器的距離爲0
 Distance(Rack1/D1, Rack1/D3)=2 同一機架不同的服務器距離爲2
 Distance(Rack1/D1, Rack2/D1)=4不同機架的服務器距離爲4
副本放置策略:
 第一個副本在本地機器
 第二個副本在遠端機架的節點
 第三個副本看之前的兩個副本是否在
同一機架,如果是則選擇其他機架,否則選擇和第一個副本相同機架的不同節點,第四個及以上,隨機選擇副本存放位置。

元數據持久化

元數據持久化的流程如下:
1.備NameNode通知主NameNode生成新的日誌文件,以後的日誌寫到Editlog.new中,並獲取舊的Editlog。
2.備NameNode從主NameNode上獲取FSImage文件及舊的EditLog。
3.備NameNode將日誌和舊的元數據合併,生成新的元數據FSImage.ckpt。
4.備NameNode將元數據上傳到主NameNode。
5.主NameNode將上傳的元數據進行回滾。
6.循環步驟1。

元數據持久化健壯機制

HDFS主要目的是保證存儲數據完整性。對於各組件的失效,做了可靠性處理。

 重建失效數據盤的副本數據
 DataNode向NameNode週期上報失敗時,NameNode發起副本重建動作以恢復丟失副本。
 集羣數據均衡 HDFS架構設計了數據均衡機制,此機制保證數據在各個DataNode上分佈是平均的。
 數據有效性保證 DataNode數據在讀取時校驗失敗,則從其他數據節點讀取數據。
 元數據可靠性保證
 採用日誌機制操作元數據,同時元數據存放在主備NameNode上。
 快照機制實現了文件系統常見的快照機制,保證數據誤操作時,能及時恢復。
 安全模式
 HDFS提供獨有安全模式機制,在數據節點故障,硬盤故障時,能防止故障擴散。

配置HDFS數據存儲策略

默認情況下,HDFS NameNode自動選擇DataNode保存數據的副本。在實際業務中,存在以下場景:
 DataNode上存在的不同的存儲設備,數據需要選擇一個合適的存儲設備分級存儲數據。
 DataNode不同目錄中的數據重要程度不同,數據需要根據目錄標籤選擇一個合適的DataNode節點保存。
 DataNode集羣使用了異構服務器,關鍵數據需要保存在具有高度可靠性的節點組中。

配置HDFS數據存儲策略-分級存儲

配置DataNode使用分級存儲:HDFS的異構分級存儲框架提供了RAM_DISK(內存虛擬硬盤)、DISK(機械硬盤)、ARCHIVE(高密度低成本存儲介質)、SSD(固態硬盤)四種存儲類型的存儲設備。通過對四種存儲類型進行合理組合,即可形成適用於不同場景的存儲策略。

 

配置HDFS數據存儲策略-標籤存儲

image.png

配置DataNode使用標籤存儲:用戶通過數據特徵靈活配置HDFS數據塊擺放策略,即爲一個HDFS目錄設置一個標籤表達式,每個DataNode可以對應一個或多個標籤;當基於標籤的數據塊擺放策略爲指定目錄下的文件選擇DataNode節點進行存放時,根據文件的標籤表達式選擇出將要存放的DataNode節點範圍,然後在這個DataNode節點範圍內,遵守下一個指定的數據塊擺放策略進行存放。

配置HDFS數據存儲策略-節點組存儲

配置DataNode使用節點組存儲:關鍵數據根據實際業務需要保存在具有高度可靠性的節點中,此時DataNode組成了異構集羣。通過修改DataNode的存儲策略,系統可以將數據強制保存在指定的節點組中。
使用約束:
 第一份副本將從強制機架組(機架組2)中選出,如果在強制機架組中沒有可用節點,則寫入失敗。
 第二份副本將從本地客戶端機器或機架組中的隨機節點中(當客戶端機器機架組不爲強制機架組時)選出。
 第三份副本將從其他機架組中選出。
 各副本應存放在不同的機架組中。
如果所需副本的數量大於可用的機架組數量,則會將多出的副本存放在隨機機架組中。

Colocation同分布

同分布(Colocation)的定義:將存在關聯關係的數據或可能要進行關聯操作的數據存儲在相同的存儲節點上。

 

Colocation同分布效果圖

 

Hadoop 實現文件級同分布,即存在相關聯的多個文件的所有塊都分佈在同一存儲節點上。文件級同分布實現文件的快速訪問,避免了因數據搬遷帶來的大量網絡開銷。

HDFS高可靠性

 

HDFS的高可靠性(HA)架構
在基本架構上增加了以下組件:
 ZooKeeper
分佈式協調,主要用來存儲HA下的狀態文件,主備信息。ZK個數建議3個及以上且爲奇數個。
 NameNode主備
NameNode主備模式,主提供服務,備合併元數據並作爲主的熱備。
 ZKFC
ZKFC(ZooKeeper Failover Controller)用於控制NameNode節點的主備狀態。
JN
JN(JournalNode)用於共享存儲NameNode生成的Editlog。

HDFS架構其他關鍵設計要點說明

 統一的文件系統:HDFS對外僅呈現一個統一的文件系統。
 統一的通訊協議:統一採用RPC方式通信。NameNode被動的接收Client, DataNode的RPC請求
 空間回收機制:支持回收站機制,以及副本數的動態設置機制。
 數據組織:數據存儲以數據塊爲單位,存儲在操作系統的HDFS文件系統上。
 訪問方式:提供JAVA API,HTTP方式,SHELL方式訪問HDFS數據。

HDFS支持接口

思考題

  1. HDFS是什麼樣的系統,適合於做什麼?
  2. HDFS的設計目標是什麼?
  3. HDFS包含哪些組件?
  4. 請簡述HDFS的讀寫流程。
  5. HDFS元數據是如何持久化的?



作者:雁翎槍
鏈接:https://www.jianshu.com/p/cdb9b36811cb
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

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