1. 程式人生 > >HDFS檔案上傳流程

HDFS檔案上傳流程

 

      首先使用者即客戶端想要上傳檔案,就先要給namenode發個請求,告訴它說我要上傳檔案了(即寫資料),然後namenode會返回一個響應,這個響應是namenode根據自身情況,比如會先查一下namenode裡面還能存資料嗎?能存多少?有幾個datanode能存?(心跳資訊)然後返回一個可以儲存的節點列表,意思是這些裡面能存,但不是能存的datanode全部返回,它會根據上傳檔案的大小來適當的返回,客戶端收到這個列表後,就向根據返回的列表裡面的datanode中寫資料,檔案會分為多個塊(block),寫的過程是以流的方式寫入的,一個塊存入一個DataNode,存完後DataNode就會備份,我們預設的備份數是3,存完後,會告訴namenode說我存完了。這樣就結束了hdfs檔案上傳的流程。

詳細文字解釋:

           1.   客戶端拿到一個檔案,跟namenode說,我要上傳這個檔案,上傳到哪個目錄下。我們假設這個檔名為 cjk.avi,目錄為  /hadoop/hdfs/

           2.   namenode拿到這個檔案後,獲取檔名,然後去元資料中查詢/hadoop/hdfs/中是否已經存在相同檔名的檔案,如果沒有,那麼告訴客戶端說你可以上傳這個檔案

           3.   客戶端接到可以上傳檔案的命令後,會將檔案進行切分(hadoop2.X是128M),切分成N(N>=1)塊,如果切成n塊,那麼除去最後一個,其它塊的大小都是一樣的。

           4.   客戶端拿到第一個塊block01後,跟namenode說,我要上傳block01,然後namenode去自身的datanode資訊池中查詢應該上傳到哪幾個datanode(備份數)中,然後將查詢到的datanode的資訊告訴客戶端

         5.   客戶端拿到datanode的資訊後,開闢一個socket流將block01上傳到namenode返回的datanode中最近的一個datanode節點,然後這個datanode節點會對block01進行水平備份,也就是將資料從datanode本地複製到其他指定的機器上。

           6.   datanode將資料水平備份完成之後,會通知客戶端,說block01上傳成功

           7.   然後客戶端會通知namenode說block01上傳成功,此時namenode會將元資料(可以簡單地理解為記錄了block塊存放到哪個datanode中)同步到記憶體中

           8.   其他的block塊迴圈上面的過程

          9.   至此一個大檔案就上傳到hdfs中了