天天看點

Hadoop之HDFS02【上傳下載下傳檔案原理】

檔案上傳原理

Hadoop之HDFS02【上傳下載下傳檔案原理】

原理步驟:

 用戶端要向HDFS寫資料,首先要跟namenode通信以确認可以寫檔案并獲得接收檔案block的datanode,然後,用戶端按順序将檔案逐個block傳遞給相應datanode,并由接收到block的datanode負責向其他datanode複制block的副本

   根namenode通信請求上傳檔案,namenode檢查目标檔案是否已存在,父目錄是否存在

   namenode傳回是否可以上傳

   client請求第一個 block該傳輸到哪些datanode伺服器上

   namenode傳回3個datanode伺服器ABC

   client請求3台dn中的一台A上傳資料(本質上是一個RPC調用,建立pipeline ),

   A收到請求會繼續調用B,然後B調用C,将整個pipeline建立完成,逐級傳回用戶端

   client開始往A上傳第一個block(先從磁盤讀取資料放到一個本地記憶體緩存),以packet為機關,

   A收到一個packet就會傳給B,B傳給C;A每傳一個packet會放入一個應答隊列等待應答

   當一個block傳輸完成之後,client再次請求namenode上傳第二個block的伺服器。

檔案下載下傳原理

Hadoop之HDFS02【上傳下載下傳檔案原理】

 用戶端将要讀取的檔案路徑發送給namenode,namenode擷取檔案的元資訊(主要是block的存放位置資訊),傳回給用戶端,用戶端根據傳回的資訊找到相應datanode逐個擷取檔案的block并在用戶端本地進行資料追加合并進而獲得整個檔案.

   跟namenode通信查詢中繼資料,找到檔案塊所在的datanode伺服器

   挑選一台datanode(就近原則,然後随機)伺服器,請求建立socket流

   datanode開始發送資料(從磁盤裡面讀取資料放入流,以packet為機關來做校驗)

   用戶端以packet為機關接收,先在本地緩存,然後寫入目标檔案

繼續閱讀