hdfs 資料流(二)

2022-09-01 21:51:29 字數 1263 閱讀 1305

大部分的hdfs程式對檔案操作需要的是一次寫多次讀取的操作模式。

乙個檔案一旦建立、寫入、關閉之後就不需要修改了。這個假定簡單化了資料一致的問題和並使高吞吐量的資料訪問變得可能。

1. 讀檔案

從上圖可以看出,客戶端讀取資料時,

首先從namenode獲取如下資訊(這些元資料資訊是在記憶體中,所以查詢速度很快,這個過程對客戶端是透明的):

a. 該檔案有哪些資料塊

b.這些資料塊都放在**或者說是取哪個節點上的什麼資料塊

然後,客戶端直接從datanode中以檔案流的方式讀取資料

最後,關閉這個檔案流

乙個問題:因為每個資料塊都有三個備份,那麼取哪個比較好?

選取讀取代價最小的節點,首先會在同乙個節點中選取(如果客戶端也是datanode時),其次在同乙個機架上的datanode中選取,最後再同乙個機房中選取

hadoop會根據網路拓撲給每乙個冗餘資料塊打分,原則就是考慮是否在同乙個節點上,是否在相同的機架上,是否在同乙個機房(目前hadoop不能跨機房部署)

2. 寫檔案

首先,客戶端通知namenode:我要寫檔案了,確認客戶端許可權和沒有相同的檔案後,namenode建立乙個新的檔案記錄

然後,將檔案分成乙個乙個的資料塊(預設大小是64m),通過檔案流的方式往datanode中寫資料,寫資料時注意是會寫冗餘資料,冗餘資料塊的個數預設是3個

最後,只有冗餘資料塊全部寫完,datanode再向客戶端發出確認,然後客戶端向namenode發出結束訊息,並將檔案的塊資訊儲存在namenode中

乙個問題:如何選datanode用來儲存冗餘資料塊

這是乙個權衡的問題:備份的可靠性,網路io的代價,其實如果都存在不同的機房,這樣的可靠性最高,但是網路io的代價就會很高,因為跨機房的網路io代價很大,如果都儲存在乙個節點上,則不需要網路io,但是資料可靠性就會打折扣

所以hadoop預設的布局策略是:第乙個隨機在機房中選擇乙個負載較小的節點,然後在不同的機架上(例如選擇了機架a)選擇乙個節點,再在相同的機架上隨機選擇乙個節點(還是在機架a上)

HDFS的資料流

1.客戶端通過distributed filesystem模組向namenode請求上傳檔案,namnode檢查目標未見是否已經存在,父目錄是否存在.2.namenode返回是否可以上傳 3.客戶端請求第乙個block上傳送到那幾個datanode伺服器上 4.namenode返回三個datanod...

HDFS的資料流(面試重點)

1 客戶端通過distributed filesystem模組向namenode請求上傳檔案,namenode檢查目標檔案是否已存在,父目錄是否存在。2 namenode返回是否可以上傳。3 客戶端請求第乙個 block上傳到哪幾個datanode伺服器上。4 namenode返回3個datanod...

Hadoop權威指南 HDFS 資料流

目錄剖析檔案寫入 一致模型 客戶端通過呼叫filesystem物件的open 方法來開啟希望讀取的檔案,對於hdfs來說,這個物件是分布式檔案系統的乙個例項 distributedfiltsystem通過使用rpc來呼叫namenode,以確定檔案起始塊的位置.接著,客戶端對這個輸入流呼叫read ...