1. 程式人生 > >從HDFS檔案系統中讀寫檔案原理

從HDFS檔案系統中讀寫檔案原理

1、從HDFS檔案系統中寫檔案

    1、客戶端發起請求要寫檔案 /aa/jdk.tgz

     2、namenode會檢查該目錄是否存在,返回是否可寫

     3、客戶端請求寫入第一個block

     4、namenode返回3個datanode主機

     5、挑選dn1,請求建立傳輸資料的連線,建立socket連線,請求帶有引數,告訴dn1要傳輸給多少臺機器

     6、7、dn1收到請求後與其他機器建立資料傳輸鏈路

     8、9、其他機器響應dn1

     10、dn1響應給客戶端已經準備好了

     11、傳輸第一個block資料帶有id、從本地檔案輸入流中抽取資料而且是從0偏移量開始讀,一邊讀一邊通過網路輸出流傳輸給dn1,dn1通過網路輸入流接受資料,通過本地檔案輸出流寫入到磁碟中,dn1一邊接受byte位元組資料一邊用網路輸出流寫道dn2上,dn2的接受資料同dn1的一樣,dn3也是同理

     12、重複步驟3-11

     13、資料全部寫完後,告知Namenode

     14、Namenode會確認記錄元資料

細節:

     如果寫入某個DataNode失敗,資料會繼續寫入其他的DataNode。然後NameNode會找另外一個好的DataNode繼續複製,以保證冗餘性;

2、從HDFS檔案系統中讀檔案

1、客戶端向NameNode發起請求,請求讀取/aaa/jdk.tgz資料

          2、NameNode返回元資料資訊,主要返回block存放的datanode

          3、挑選一臺datanode(就近原則),請求建立socket流 ,請求讀取block資料,

                 從datanode的本地檔案輸入流開始讀資料,以二進位制的形式寫到網路輸出流,

                 網路輸出流通過網路傳輸到客戶端, 客戶端通過網路輸入流接收資料,寫入到

                  本地檔案輸出流中,然後寫入目標檔案

          4、重複3過程,直到讀取完全部的資訊,最終合成一個檔案。