![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TVXF2dSpnWxokMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLyMzNxUTN0AjM1ADOwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
- 第1步用戶端發去
,目的時擷取CreeteFile
檔案的輸出流,HDFS
收到請求後會檢測路徑的合法性,以及權限。原生Hadoop的權限管理不是很完善,工作中用的是CDH(商業版Hadoop)如果檢測通過,namenode
會為這個檔案生成塊的中繼資料資訊(比如:1為檔案切塊2配置設定塊id3配置設定每個塊存在那個namenode
上),然後将原屬資訊封裝到輸出流中,傳回給用戶端。datanode
- 第2,3步
拿出輸出流之後,采用Client
(資料流管道)機制做資料的上傳發送,這樣設計的目的在于利用每台服務的帶寬,最小化推送資料的延時。PipeLine
是一個packet
大小的資料包,即用戶端在發送檔案塊時,會在檔案塊變成一個一個的資料發送。64Kb
- 第4.5步- 每台
收到datanode
,會向上遊packet
做datanode
确認,如果接受失敗,會進行重發ack
- 第6步 當一個檔案上傳完後,關流。
分步
上傳兩塊檔案到HDFS,先上傳第一塊。DN1的選擇離Client最近的一個。DN2,DN3是由DN1決定的
再上傳第二塊,選擇的Datanode可能和第一塊不在同一個。
第三步