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