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