1)客戶端向namenode請求上傳檔案,namenode檢查目標檔案是否已存在,父目錄是否存在。2)namenode返回是否可以上傳。
3)客戶端請求第乙個 block上傳到哪幾個datanode伺服器上。
4)namenode返回3個datanode節點,分別為dn1、dn2、dn3。
5)客戶端請求dn1上傳資料,dn1收到請求會繼續呼叫dn2,然後dn2呼叫dn3,將這個通訊管道建立完成
6)dn1、dn2、dn3逐級應答客戶端
7)客戶端開始往dn1上傳第乙個block(先從磁碟讀取資料放到乙個本地記憶體快取.快取再放到dn裡),以packet為單位,dn1收到乙個packet就會傳給dn2,dn2傳給dn3;dn1每傳乙個packet會放入乙個應答佇列等待應答
8)當乙個block傳輸完成之後,客戶端再次請求namenode上傳第二個block的伺服器。(重複執行3-7步)
寫資料過程中,涉及節點之間的傳輸和儲存。傳輸涉及到效能,主要依賴於距離;儲存涉及到節點的選擇。下面就來看看這兩個方面
在本地網路中,兩個節點被稱為「彼此近鄰」是什麼意思?在海量資料處理中,其主要限制因素是節點之間資料的傳輸速率——頻寬很稀缺。這裡的想法是將兩個節點間的頻寬作為距離的衡量標準。
節點距離:兩個節點到達最近的共同祖先的距離總和。
例如,假設有資料中心d1機架r1中的節點n1。該節點可以表示為/d1/r1/n1。利用這種標記,這裡給出四種距離描述。下圖機架可以理解為不同的路由器
distance(/d1/r1/n1, /d1/r1/n1)=0(同一節點上的程序)
distance(/d1/r1/n1, /d1/r1/n2)=2(同一機架上的不同節點)
distance(/d1/r1/n1, /d1/r3/n2)=4(同一資料中心不同機架上的節點;n1-機架1-集群d1+n2-機架3+集群d1=4)
distance(/d1/r1/n1, /d2/r4/n2)=6(不同資料中心的節點)
即副本節點擊擇
假設要求有三個副本,而集群中有四個節點,三個副本的位置在哪?
第乙個副本在client所處的節點上。如果客戶端在集群外,隨機選乙個。第二個副本和第乙個副本位於不相同機架的隨機節點上。
第三個副本和第二個副本位於相同機架,節點隨機。
第乙個副本在client所處的節點上。如果客戶端在集群外,隨機選乙個。當然,也可以自定義機架感知第二個副本和第乙個副本位於相同機架,隨機節點。
第三個副本位於不同機架,隨機節點。
hdfs原始碼深度解析 四 檔案上傳全流程
下面是斷斷續續的記錄,後續會出流程圖,以及原始碼片段 一 建立資料管道 dfsoutputstream setpipeline nextblockoutputstream 二 啟動了responseprocessor,用來監聽我們乙個packet傳送是否成功 initdatastreaming 啟動...
HDFS檔案寫入過程
目標 掌握hdfs寫入資料的詳細過程 詳細步驟解析 list itemclient發起檔案上傳請求,通過rpc與namenode建立通訊,namenode檢查目標檔案是否已存在,父目錄是否存在,返回是否可以上傳 client請求第乙個block該傳輸到哪些datanode伺服器上 client請求3...
358 檔案上傳解析
檔案上傳解析 閱讀鴻洋大神部落格筆記 如果是瀏覽器上傳檔案,其實是把檔案資料轉換成2進製 然後按特定的格式傳送給伺服器 android也是乙個道理 先看看 然後再分析 public void uploadform mapparams,string fileformname,file uploadfi...