HDFS讀寫資料流程
阿新 • • 發佈:2021-07-29
HDFS寫資料流程
資料寫入流程
- 客戶端向namenode請求上傳檔案,namenode檢查目標檔案是否已存在,父目錄是否存在。
- namenode返回是否可以上傳。
- 客戶端請求第一個 block上傳到哪幾個datanode伺服器上。
- namenode返回3個datanode節點,分別為dn1、dn2、dn3。
- 客戶端請求dn1上傳資料,dn1收到請求會繼續呼叫dn2,然後dn2呼叫dn3,將這個通訊管道建立完成。
- dn1、dn2、dn3逐級應答客戶端。
-
客戶端開始往dn1上傳第一個block(先從磁碟讀取資料放到一個本地記憶體快取),以packet為單位,dn1
- 當一個block傳輸完成之後,客戶端再次請求namenode上傳第二個block的伺服器。(重複執行3-7步)
機架感知(副本節點選擇)---- 資料備份:
低版本hadoop副本節點選擇
第一個副本在client所處的節點上。如果客戶端在叢集外,隨機選一個。
第二個副本和第一個副本位於不相同機架的隨機節點上。
第三個副本和第二個副本位於相同機架,節點隨機。
Hadoop 2.8.5副本節點選擇
第一個副本client所處的節點上。如果客戶端在叢集外,隨機選一個。
第二個副本和第一個副本位於相同機架,隨機節點。
第三個副本位於不同機架,隨機節點。
優勢:不同計價之間連線需要耗時間,但是同一機架上的連線不需要耗時間,通過這樣設定副本節點使得第一個副本節點和第二個副本節點之間的距離更近,傳輸更快
HDFS讀資料流程
- 客戶端向namenode請求下載檔案,namenode通過查詢元資料,找到檔案塊所在的datanode地址。
- 挑選一臺datanode(就近原則,然後隨機)伺服器,請求讀取資料。
- datanode開始傳輸資料給客戶端(從磁盤裡面讀取資料放入流,以packet為單位來做校驗)。
- 客戶端以packet為單位接收,先在本地快取,然後寫入目標檔案。