1. 程式人生 > >Hadoop Core_HDFS總結(一)

Hadoop Core_HDFS總結(一)

一、產生背景

傳統的本地檔案系統(單機式),在資料量增長過快、資料備份、資料安全性、操作使用便捷性上存在嚴重不足。

二、架構設計

2.1. 定義

HDFS(Hadoop Distributed File System)Hadoop分散式檔案系統。

2.2. 元件角色

1)NameNode:  HDFS元資料管理者,管理 NameSpace(檔案系統名稱空間),記錄檔案是如何分割成資料塊以及他們分別儲存在叢集中的哪些資料節點上。NameSpace 或其本身屬性的任何更改都由 NameNode 記錄,維護整個檔案系統的檔案和目錄。

2)DataNode:  DataNode 是檔案系統的工作節點。根據客戶端或者 NameNode 傳送的管理指令,負責 HDFS 的資料塊的讀寫和檢索操作。通過心跳機制定期向 NameNode 傳送他們的儲存塊的列表。

3)Client :  客戶端 Client 代表使用者與 NameNode 或者 DataNode 互動來訪問整個檔案系統的物件

2.3. 特點

1)高容錯和高可用性,硬體錯誤是常態而不是異常

HDFS 設計為執行在普通硬體上,所以硬體故障是很正常的。HDFS 提供檔案儲存副本策略, 可以實現錯誤自檢並快速自動恢復。個別硬體的損壞不影響整體資料完整性和計算任務的正常執行。

2)流式資料訪問

HDFS 主要採用流式資料讀取,做批量處理而不是使用者互動處理,因此 HDFS 更關注資料訪問的高吞吐量。

3)彈性儲存,支援大規模資料集

HDFS 支援大檔案儲存,典型的檔案在GB 甚至TB 級別,可以支援數以千萬計的大規模資料集。根據業務需要靈活的增加或者縮減儲存節點。彈性儲存的最大挑戰是減小在修改儲存節點時的資料震盪問題。

4)簡單一致性模型

HDFS 檔案實行一次性寫、多次讀的訪問模式。設計為檔案一經建立、寫入和關閉之後就不需要再更改了,這種設計和假定簡化了資料一致性問題,使高吞吐量成為可能。

5)移動計算而非移動資料

由於 HDFS 支援大檔案儲存,對於大檔案來說,移動計算比移動資料的代價要低。這樣也可以減少網路的擁塞和提高系統的吞吐量。

6)協議和介面多樣性

為上層應用提供了多種介面,Http RestFul 介面、NFS 介面、Ftp 介面等等 POSIX 標準協議, 另外通常會有自己的專用介面。

7)多樣的資料管理功能

對於資料壓縮、資料加密、資料快取和儲存配額等提供了多樣的管理功能。

2.4. 架構設計

HDFS是一個主從式(Master/slave)的體系結構。HDFS叢集中有一個NameNode和一些DataNode。NameNode管理檔案的元資料,DataNode 儲存實際的資料。客戶端聯絡 NameNode 來獲取元資料資訊,而真正的檔案 I/O 是直接和 DataNode 進行互動的。

2.4.1 讀檔案流程

1)客戶端向NameNode傳送請求,NameNode根據客戶端的請求查詢資料對應的資料塊資訊。

2)NameNode返回檔案對應的 資料塊元資料資訊(所屬機器、資料塊的block_id、資料塊順序)

3)客戶端向DataNode直接通訊,讀取各個Block資料塊資訊。該過程是並行讀取,由客戶端合併資料。

2.4.2 寫檔案流程

1)客戶端先向NameNode申請,NameNode尋找可以寫入資料塊資訊的機器位置。

如果檔案大,寫入會被分成很多block資料塊,實際上是通過一個block一個block進行申請。如果設定副本數為3,則每次請求會返回一個block對應的3個副本的block的存放位置

2)客戶端獲取對應的block資料塊所處的DataNode節點後,開始寫操作。客戶端整個過程以資料包package的方式逐個傳送和接受。存在多個副本時,一個數據塊的package包的寫入是依次進行的。寫入到第一個DataNode後,第一個向第二個DataNode傳輸,第二個寫完後,向第三個傳輸package。每完成一個副本對client有一個應答,副本數為3則會有3次應答。寫完一個block塊在為下一個block塊申請然後寫入。

3)待所有的資料塊 block 均寫完後,Client 接收到全部寫完的 ack 答覆,告訴 NameNode 資料已寫完,Client 關閉 socket 流。DataNode 這時才會向 NameNode 報告新增 block 資料塊的資訊。