客戶端通過rpc與NN通信
寫文件命令:bin/hdfs dfs - put xxx.log /usr/hadoop/data/
1、Client調用(Distributed FileSystem)filesystem.creat(傳的是文件的filepath),與NN節點進行rpc通信,NN check Path檢查該路徑下的文件是否已經存在及有沒有權限創建;
-假如ok,就創建一個新文件,但是不關聯任何的block,返回一個FSDataOutputStream對象;
-假如不ok,就返回錯誤信息。
2、Client調用FSDataOutputStream對象的write方法
將第一個塊寫給DataNode(DN1),當第一個塊寫完,DN1複製塊到DN2,
當第二個塊寫完,DN2複製塊到DN3,
當第三個塊寫完,DN3返回一個ack packet確認包給DN2,
當DN2收到DN3的ack,發送一個ack packet給DN1,
當DN1收到DN2的ack,發送一個ack packet 給FSDataOutputStream對象,標識第一個塊3個副本全部寫完;
然後餘下的塊依次這麼寫!
3、刷新緩存數據包:
當文件寫完成,Client調用FSDataOutputStream對象的close方法,關閉輸出流,flush緩存區的數據包
4、再調用filesystem.complete方法,告訴NN文件寫入成功。