HDFS系列 4 HDFS檔案讀寫流程

2021-10-05 07:52:03 字數 1940 閱讀 2124

本片博文,博主為大家帶來的是hdfs檔案讀寫流程

詳細步驟解析:

1、 client發起檔案上傳請求,通過rpc與namenode建立通訊,namenode檢查目標檔案是否已存在,父目錄是否存在,返回是否可以上傳;

2、 client請求第乙個block該傳輸到哪些datanode伺服器上;

3、 namenode根據配置檔案中指定的備份數量及機架感知原理進行檔案分配,返回可用的datanode的位址如:a,b,c;

注:hadoop在設計時考慮到資料的安全與高效,資料檔案預設在hdfs上存放三份,儲存策略為本地乙份,同機架內其它某一節點上乙份,不同機架的某一節點上乙份。

4、 client請求3臺datanode中的一台a上傳資料(本質上是乙個rpc呼叫,建立pipeline),a收到請求會繼續呼叫b,然後b呼叫c,將整個pipeline建立完成,後逐級返回client;

5、 client開始往a上傳第乙個block(先從磁碟讀取資料放到乙個本地記憶體快取),以packet為單位(預設64k),a收到乙個packet就會傳給b,b傳給c;a每傳乙個packet會放入乙個應答佇列等待應答。

6、 資料被分割成乙個個packet資料報在pipeline上依次傳輸,在pipeline反方向上,逐個傳送ack(命令正確應答),最終由pipeline中第乙個datanode節點a將pipelineack傳送給client;

7、 當乙個block傳輸完成之後,client再次請求namenode上傳第二個block到伺服器。

詳細步驟解析:

1、 client向namenode發起rpc請求,來確定請求檔案block所在的位置;

2、namenode會視情況返回檔案的部分或者全部block列表,對於每個block,namenode 都會返回含有該 block 副本的 datanode 位址; 這些返回的 dn 位址,會按照集群拓撲結構得出 datanode 與客戶端的距離,然後進行排序,排序兩個規則:網路拓撲結構中距離 client 近的排靠前;心跳機制中超時匯報的 dn 狀態為 stale,這樣的排靠後;

3、 client 選取排序靠前的 datanode 來讀取 block,如果客戶端本身就是datanode,那麼將從本地直接獲取資料(短路讀取特性);

4、 底層上本質是建立 socket stream(fsdatainputstream),重複的呼叫父類 datainputstream 的 read 方法,直到這個塊上的資料讀取完畢;

5、 當讀完列表的 block 後,若檔案讀取還沒有結束,客戶端會繼續向namenode 獲取下一批的 block 列表;

6、 讀取完乙個 block 都會進行 checksum 驗證,如果讀取 datanode 時出現錯誤,客戶端會通知 namenode,然後再從下乙個擁有該 block 副本的datanode 繼續讀。

7、 read 方法是並行的讀取 block 資訊,不是一塊一塊的讀取;namenode 只是返回client請求包含塊的datanode位址,並不是返回請求塊的資料;

8、 最終讀取來所有的 block 會合併成乙個完整的最終檔案。

說明:

1、讀取完乙個 block 都會進行 checksum 驗證,如果讀取 datanode 時出現錯誤,客戶端會

通知 namenode,然後再從下乙個擁有該 block 副本的datanode 繼續讀。

2、read 方法是並行的讀取 block 資訊,不是一塊一塊的讀取;namenode 只是返回client請

求包含塊的datanode位址,並不是返回請求塊的資料;

hdfs讀寫流程 HDFS 檔案讀寫流程

開啟分布式檔案 呼叫分布式檔案 distributedfilesystem.open 方法 定址請求 從 namenode 處得到 datanode 的位址,distributedfilesystem使用 rpc 方式呼叫了namenode,namenode 返回存有該副本的datanode 位址,...

HDFS讀寫檔案

hdfs讀寫檔案 hdfs讀檔案 首先,由client下達命令交給distributed file system系統翻譯成linux命令,然後把命令傳送給namenode,namenode去搜尋fsimage和edit logs,搜到以後把檔案的塊位址 get block locations 返回給...

HDFS檔案讀寫流程

詳細步驟解析 1 client發起檔案上傳請求,通過rpc與namenode建立通訊,namenode檢查目標檔案是否已存在,父目錄是否存在,返回是否可以上傳 2 client請求第乙個block該傳輸到哪些datanode伺服器上 3 namenode根據配置檔案中指定的備份數量及機架感知原理進行...