Hadoop:HDFS數據存儲與切分

Hadoop入門教程:HDFS數據存儲與切分,在Hadoop中數據的存儲是由HDFS負責的,HDFS是Hadoop分佈式計算的存儲基石,Hadoop的分佈式文件系統和其他分佈式文件系統有很多類似的特質。那麼HDFS相比於其他的文件系統有什麼特徵呢?簡單總結有如下的基本特徵:

對於整個集羣有單一的命名空間。

數據一致性。適合一次寫入多次讀取的模型,客戶端在文件沒有被成功創建之前無法看到文件存在。

(DataNode存儲的是多個數據分割成的數據塊,多個數據塊共同構成一個文件)

文件會被分割成多個文件塊,每個文件塊被分配存儲到數據節點上,而且根據配置會有複製文件塊來保證數據的安全性。

在Hadoop中數據存儲涉及HDFS的三個重要角色,分別爲:名稱節點(NameNode)、數據節點(DataNode)、客戶端。

NameNode可以看做是分佈式文件系統中的管理者,主要負責管理文件系統的命名空間、集羣配置信息、存儲塊的複製。NameNode會存儲文件系統的Metadata在內存中,這些信息主要包括文件信息,即每一個文件對應的文件塊的信息,以及每一個文件塊在DataNode的信息。

DataNode是文件存儲的基本單元。它將Block存儲在本地文件系統中,保存了Block的Metadata,同時週期性地發送所有存在的Block的報告給NameNode。Client就是需要獲取分佈式文件系統文件的應用程序。數據存儲中的讀取和寫入過程,如圖1-3所示。


從圖1-3中可以看到,數據存儲過程中主要通過三個操作來說明NameNode、DataNode、Client之間的交互關係。根據圖1-3所示的內容我們簡單分析一下Hadoop存儲中數據寫入和讀取訪問的基本流程步驟。

文件寫入HDFS的基本流程如下:

1)Client向NameNode發起文件寫入的請求。

2)NameNode根據文件大小和文件塊配置情況,向Client返回它所管理的DataNode的信息。

3)Client將文件劃分爲多個Block,根據DataNode的地址信息,按順序寫入每一個DataNode中。

文件讀取HDFS的基本流程如下:

1)Client向NameNode發起文件讀取的請求。

2)NameNode返回文件存儲的DataNode的信息。

3)Client讀取文件信息。

在HDFS中複製文件塊的基本流程如下:

1)NameNode發現部分文件的Block不符合最小複製數或部分DataNode失效。

2)通知DataNode相互複製Block。

3)DataNode開始相互複製。

通過上面三個流程我們基本瞭解了Hadoop是如何使用HDFS存儲數據的,那麼在Hadoop中數據是如何切分的呢?我們知道HDFS在具體存儲文件數據時先劃分爲邏輯Block塊,後續的寫入、讀取、複製都是以Block塊爲單元進行的。那麼在Hadoop中數據處理時存儲在HDFS上的數據是如何切分呢?其實從HDFS的文件寫入過程就可以看出,在Client和NameNode交互的同時是需要加載客戶端的Hadoop配置文件的,如果用戶設置了塊的大小配置屬性dfs.block.size,就會按照用戶自定義的大小進行邏輯切分,如果沒有配置,則使用集羣默認的配置大小,因此在寫入數據時文件已經在邏輯上切分好了,在運行MapReduce時默認就會按照切分好的塊大小和數量來啓動Map,也就是默認Map的數量是在數據寫入時就確定好的,當然用戶也可以指定文件數據的切分大小,可通過mapred.min.split.size參數在將作業提交客戶端時進行自定義設置。


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