HDFS讀寫過程

HDFS的讀寫過程:node

  讀過程:函數

Client收到用戶的讀請求——client拿着pathnamenode請求文件或者blockdatanode列表——client從返回的datanode列表中選擇一個離本身最近的datanode,而且向他請求數據——datanode接到請求返回block的數據spa

讀過程:對象

  DFSInputStream對象中包含文件開始部分的數據塊所在的DataNode地址,首先它會連接包含文件第一個塊最近的DataNode。隨後,在數據流中重複調用read函數,知道這個塊所有讀完位置,當最後一個塊讀取完畢時,DFSInputStream會關閉鏈接,並查找存儲下一個數據塊客戶端最近的DataNode。客戶端按照DFSInputSttream打開和DataNode鏈接返回的數據流的順序讀取該塊,它會調用NameNode來檢索下一組塊所在的DataNode的位置信息。隊列

 

  寫過程:client接到用戶的寫請求——client接收到數據,分割成一個個block——client請求namenode,並說明寫入的數據大小和備份數——namenode返回給client須要的datanode列表——client寫入第一個datanode,以packet的形式寫入,一個packet通常爲64k;第一個datanode寫入第二個datanode,依次類推;每寫入一個datanode都會返回ack信息,第一個datanode返回全部的ack信息;當datanode持久化數據後向namenode彙報已經完成——client接收到ack,檢查全部datanode都寫入正常,發送請求給namenode要求關閉文件——namenode關閉文件。cli

  寫過程:DFSOutputStream將文件分割成包,而後放入一個內部隊列。DataStreamer會將這些小的文件包放入數據流中。請求

 

  

  副本寫過程:假設副本系數爲3,當本地臨時文件累積到一個數據塊的大小(累積量超過一個數據塊的大小),客戶端會從NameNode獲取一個Datanode列表用於存放副本,而後客戶端開始向第一個Datanode傳輸數據,第一個Datanode一小部分一小部分(4kb)接收數據,將每一部分寫入本地倉庫,並同時傳輸到該部分到列表中第二個Datanode節點,第二個Datanode也是這樣因此,Datanode採起流水線複製,從前一個節點接收數據,並在同時轉發給下一個節點。im

相關文章
相關標籤/搜索