1. 客戶端向namenode發(fā)起RPC調(diào)用,請求讀取文件數(shù)據(jù)。
2. namenode檢查文件是否存在,如果存在則獲取文件的元信息(blockid以及對應(yīng)的datanode列表)。
3. 客戶端收到元信息后選取一個網(wǎng)絡(luò)距離最近的datanode,依次請求讀取每個數(shù)據(jù)塊??蛻舳耸紫纫z文件是否損壞,如果損壞,客戶端會選取另外的datanode請求。
4. datanode與客戶端建立socket連接,傳輸對應(yīng)的數(shù)據(jù)塊,客戶端收到數(shù)據(jù)緩存到本地,之后寫入文件。
5. 依次傳輸剩下的數(shù)據(jù)塊,直到整個文件合并完成。