1. 客户端向namenode发起RPC调用,请求读取文件数据。
2. namenode检查文件是否存在,如果存在则获取文件的元信息(blockid以及对应的datanode列表)。
3. 客户端收到元信息后选取一个网络距离最近的datanode,依次请求读取每个数据块。客户端首先要校检文件是否损坏,如果损坏,客户端会选取另外的datanode请求。
4. datanode与客户端建立socket连接,传输对应的数据块,客户端收到数据缓存到本地,之后写入文件。
5. 依次传输剩下的数据块,直到整个文件合并完成。