1. 客戶端發(fā)出請求hdfs dfs -put /etc/profile /qf/data
2. namenode查看維護的目錄結構,檢查/qf/data是否存在,如不存在直接報錯”no such file or directory“,如存在返回給客戶端同意上傳文件請求,將操作寫入日志文件
3. 客戶端請求上傳第一個塊,詢問namenode塊的存儲位置
4. namenode查看自己的datanode池,返回給客戶端一個datanode列表
5. 客戶端發(fā)出請求建立pipeline
6. 客戶端先把文件寫入緩存,達到一個塊的大小時,會在客戶端和第一個datanode建立連接開始流式的傳輸數(shù)據(jù),這個datanode會一小部分一小部分(4K)的接收數(shù)據(jù)然后寫入本地倉庫,同時會把這些數(shù)據(jù)傳輸?shù)降诙€datanode,第二個datanode也同樣一小部分一小部分的接收數(shù)據(jù)并寫入本地倉庫,同時傳輸給第三個datanode...(在流式復制時,逐級傳輸和響應采用響應隊列來等待傳輸結果。隊列響應完成后返回給客戶端)
7. 第一個數(shù)據(jù)塊傳輸完成后會使用同樣的方式傳輸下面的數(shù)據(jù)塊直到整個文件上傳完成。
8. 整個文件完成,namenode更新內(nèi)存元數(shù)據(jù)