HDFS讀取檔案步驟

2021-07-02 21:45:10 字數 879 閱讀 3658

client呼叫filesystem.open(),該filesystem指向的例項是distrbutedfilesystem(dfs),它通過rpc請求到namenode.

namenode收到請求後,對於每乙個塊返回存有該副本的datanode位址。並且依照「網路拓撲」來排序。(就近原則)

dfs獲取到blocklocations後,可以根據當前讀取偏移量計算指定datanode並進行通訊,返回乙個fsdatainputstream,該物件管理datanode和namenode的i/o, 客戶端反覆呼叫stream.read()方法獲取資料 (這步包含了權威指南的3,4步驟)。

到達塊的末端時,stream關閉與當前互動的datanode的連線,繼續尋找下乙個最佳的datanode再執行步驟3操作。

client從stream讀取資料時,塊是按照開啟stream和datanode的順序讀取的,它也會詢問namenode來檢索下一批資料塊datanode的位置。(《權威指南第三版》76頁倒數第4行描述有誤,事實上一次性獲取了完整的blocklocations) 一旦client讀取完成,就對stream執行close操作

上述流程是在正常讀取,並且沒有發生故障的理想情況下。

補充:總結:這個設計的重點是,namenode告知客戶端每個塊中最佳的datanode,並讓客戶端直接連線到該datanode檢索資料。由於資料流分散在集群中的所有datanode,所以這種設計能使hdfs可擴充套件到大量的併發客戶端。同時,namenode只需要響應塊位置的請求(這些資訊儲存在記憶體中,所以非常高效),無須響應資料請求,否則隨著客戶端數量的增長,namenode會很快成為瓶頸。

HDFS 檔案讀取過程

client向namenode發起rpc請求,來確定請求檔案block所在的位置 namenode會視情況返回檔案的部分或者全部block的主機列表,namenode會對列表進行排序,排序兩個規則 網路拓撲結構中距離 client 近的排靠前 心跳機制中超時匯報的 dn 狀態為 stale,這樣的排...

HDFS檔案讀取和寫入

讀取檔案 一 讀取方式一 寫入哪個datanode是不確定的,主要尋找讀取速度較快的datanode 怎麼找到這種datanode,從以下幾個方面 是否有本機位置,本機架位置,本機房位置 依次重試讀取檔案,直到讀取檔案成功 二 讀取方式二 backupread 每次讀取時,client會並行試著讀取...

從hdfs讀取image檔案

發現從hdfs直接讀取image檔案response image.open filepath 會報錯路徑不存在,出現這個問題是因為pil的image.open filepath 只能開啟本地路徑裡的檔案,不能開啟hdfs裡的。而且hdfs是相對路徑,所以直接開啟的話是找不到的。所以要從hdfs讀取,...