1.Client調用DistributedFileSystem對象的create()方法,創(chuàng)建一個文件輸出流
2.DistributedFileSystem對namenode創(chuàng)建一個RPC調用,在文件系統(tǒng)的命名空間中創(chuàng)建一個新文件。
3.Namenode執(zhí)行各種不同的檢查以確保這個文件不存在,并且客戶端有創(chuàng)建該文件的權限。如果這些檢查均通過,namenode就會為創(chuàng)建新文件記錄一條記錄,否則,文件創(chuàng)建失敗,向Client拋出IOException,DistributedFileSystem向Client返回一個FSDataOutputStream隊形,Client可以開始寫入數(shù)據(jù)。
4.DFSOutputStream將它分成一個個的數(shù)據(jù)包,并寫入內部隊列。DataStreamer處理數(shù)據(jù)隊列,它的責任時根據(jù)datanode列表來要求namenode分配適合新塊來存儲數(shù)據(jù)備份。這一組datanode構成一個管線---我們假設副本數(shù)為3,管路中有3個節(jié)點,DataStreamer將數(shù)據(jù)包流式床書到管線中第一個datanode,該dananode存儲數(shù)據(jù)包并將它發(fā)送到管線中的第二個datanode,同樣地,第二個datanode存儲該數(shù)據(jù)包并且發(fā)送給管縣中的第3個。
5.DFSOutputStream也維護著一個內部數(shù)據(jù)包隊列來等待datanode的收到確認回執(zhí)(ack queue)。當收到管道中所有datanode確認信息后,該數(shù)據(jù)包才會從確認隊列刪除。
6.Client完成數(shù)據(jù)的寫入后,回對數(shù)據(jù)流調用close()方法
7.將剩余所有的數(shù)據(jù)包寫入datanode管線中,并且在練習namenode且發(fā)送文件寫入完成信號之前
