HDFS文件讀取和文件寫入過程

  • hdfs文件讀取過程

過程描述:node

  (1)客戶端調用FileSyste對象的open()方法在分佈式文件系統中打開要讀取的文件。分佈式

  (2)分佈式文件系統經過使用RPC(遠程過程調用)來調用namenode,肯定文件起始塊的位置。函數

  (3)分佈式文件系統的DistributedFileSystem類返回一個支持文件定位的輸入流FSDataInputStream對象,FSDataInputStream對象接着封裝DFSInputStream對象(存儲着文件起始幾個塊的datanode地址),客戶端對這個輸入流調用read()方法。spa

  (4)DFSInputStream鏈接距離最近的datanode,經過反覆調用read方法,將數據從datanode傳輸到客戶端。3d

  (5) 到達塊的末端時,DFSInputStream關閉與該datanode的鏈接,尋找下一個塊的最佳datanode對象

  (6)客戶端完成讀取,對FSDataInputStream調用close()方法關閉鏈接。blog

  • hdfs文件寫入過程

  • 過程描述:

寫文件過程分析:隊列

  (1) 客戶端經過對DistributedFileSystem對象調用create()函數來新建文件。class

  (2) 分佈式文件系統對namenod建立一個RPC調用,在文件系統的命名空間中新建一個文件。集羣

  (3)Namenode對新建文件進行檢查無誤後,分佈式文件系統返回給客戶端一個FSDataOutputStream對象,FSDataOutputStream對象封裝一個DFSoutPutstream對象,負責處理namenode和datanode之間的通訊,客戶端開始寫入數據。

  (4)FSDataOutputStream將數據分紅一個一個的數據包,寫入內部隊列「數據隊列」,DataStreamer負責將數據包依次流式傳輸到由一組namenode構成的管線中。

  (5)DFSOutputStream維護着確認隊列來等待datanode收到確認回執,收到管道中全部datanode確認後,數據包從確認隊列刪除。

  (6)客戶端完成數據的寫入,對數據流調用close()方法。

  (7)namenode確認完成

  • Block的副本放置策略

        

    

   第一個副本:放置在上傳文件的DN;若是是集羣外提交,則隨機挑選一臺磁盤不太滿,CPU不太忙的節點

   第二個副本:放置在於第一個副本不一樣的 機架的節點上。

   第三個副本:與第二個副本相同機架的節點。

   更多副本:隨機節點

相關文章
相關標籤/搜索