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