HDFS的读/写流程
1.HDFS讀流程
HDFS讀流程
1.1 、Client通過FileSystem.open(filePath)方法,與NN節點進行【rpc】協議通信,校驗是否有權限是否存在,假如都ok,返回該文件的部分或全部的block的列表(包含各個block塊的分布在DN地址的列表),也就是返回【FSDataInputStream】對象;
1.2、Clinet調用FSDataInputStream.read方法。
a.與第一個塊的最近的DN進行read,讀取完成后,會check,假如ok,會關閉與當前的DN的通信;假如失敗會記錄塊的這個副本+DN信息,向NN匯報這個塊副本損壞,下次就不會從這讀取。那么就去該塊的第二個DN的地址讀取
b.然后讀取第二個塊,步驟和a一樣
c.假如block列表讀取完成后,文件還未結束,那么FileSystem會從NN獲取下一批次的block的列表。
1.3、Client調用FSDataInputStream.close()方法,關閉輸入流。
2.HDFS寫流程
HDFS寫流程
?
2.1 、Client調用FileSystem.create(filePath)方法,與NN進行【rpc】通信,檢驗該路徑是否有權限創建是否文件存在,假如ok,就創建一個新的文件,但不關聯任何的block,返回一個【FSDataOutputStream】(假如不ok,直接返回錯誤)
2.2、 Client調用FSDataOutputStream.write方法
a.將第一個塊的第一個副本寫入DN1,第一個副本寫完傳輸給第二個DN2,第二個副本寫完就傳輸給第三個DN3,當第DN3寫完,就返回一個ack packet給DN2,DN2就返回ack packet給DN1,DN1就返回ack packet的FSDataOutputStream對象,標識第一個塊的三個副本都寫完了
b.余下的塊依次這樣
2.3、 當向文件寫入數據完成后,Client調用FSDataOutputStream.close()方法
關閉輸出流
2.4、 再調用FileSystem.complete()方法,告訴NN節點寫入成功。
總結
以上是生活随笔為你收集整理的HDFS的读/写流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件工程师 VS 硬件工程师
- 下一篇: c51串行通信汇编语言,51单片机双机串