首先了解資料寫入過程中,什麼是block, packet, chunk
1.block:資料塊,當上傳的檔案太大時, 就需要分塊,乙個塊預設設定時128m, 在客戶端完成切割操作。資料塊block也不是一次性傳送到 datanode中,在客戶端向datanode傳送資料檔案時,是分成乙個乙個的packet的每個packet預設64kb。
所以從客戶端到第乙個結點,第乙個結點到第二結點… , 資料傳輸是串聯的,以乙個個packet的形式流動。
chunk是client向datanode,或著datanode和pipeline之間進行資料校驗的基本單位,預設512byte,且每個chunk需要帶有4byte的校驗位。所以乙個chunk是516kb
(1)客戶端通過distributed filesystem模組向namenode請求上傳檔案,namenode檢查目標檔案是否已存在,父目錄是否存在。
(2)namenode返回是否可以上傳。
(3)客戶端請求第乙個 block上傳到哪幾個datanode伺服器上。
(4)namenode返回3個datanode節點,分別為dn1、dn2、dn3。
(5)客戶端通過fsdataoutputstream模組請求dn1上傳資料,dn1收到請求會繼續呼叫dn2,然後dn2呼叫dn3,將這個通訊管道建立完成。
(6)dn1、dn2、dn3逐級應答客戶端。
(7)客戶端開始往dn1上傳第乙個block(先從磁碟讀取資料放到乙個本地記憶體快取),以packet為單位,dn1收到乙個packet就會傳給dn2,dn2傳給dn3;dn1每傳乙個packet會放入乙個應答佇列等待應答。
(8)當乙個block傳輸完成之後,客戶端再次請求namenode上傳第二個block的伺服器。(重複執行3-7步)。
注意:讀取也遵尋最近原則,如果datanode1結點壞了,就會從datanode2中讀。底層同乙個結點中,用的同乙個流,不同節點會開啟新的流。
(2)挑選一台datanode(就近原則,然後隨機)伺服器,請求讀取資料。
(3)datanode開始傳輸資料給客戶端(從磁碟裡面讀取資料輸入流,以packet為單位來做校驗)。
始傳輸資料給客戶端(從磁碟裡面讀取資料輸入流,以packet為單位來做校驗)。
(4)客戶端以packet為單位接收,先在本地快取,然後寫入目標檔案。
HDFS資料寫入流程
1 client 發起檔案寫入請求,通過 rpc 與 namenode 建立通訊,namenode檢查目標檔案,返回是否可以上傳 2 client 請求第乙個 block 該傳輸到哪些 datanode 伺服器上 3 namenode 根據副本數量和副本放置策略進行節點分配,返回datanode節點...
HDFS的讀取流程 寫入流程 刪除流程
讀流程 1 客戶端通過rpc訪問namenode。呼叫filesystem的open方法,獲取distributedfilesystem例項 2 namenode查詢元資料,獲取元資料路徑,將檔案的全部或部分檔案塊的儲存路徑,放入佇列,傳送給客戶端。3 客戶端收到佇列 fsdatainputstre...
HDFS讀取和寫入流程
1 讀檔案的過程 首先 client 通過 file system 的 open 函式開啟檔案,distributed file system 用 rpc呼叫 namenode 節點,得到檔案的資料塊資訊。對於每乙個資料塊,namenode 節點返回儲存資料塊的資料節點的位址。distributed...