1.首先客户端会向NameNode发送一个请求获取下载文件的前几个block块的位置
2.NameNode接受到客户端的请求之后,将文件的前几个block块的位置按照其所在的DataNode与客户端的网络拓扑距离的远近进行一个排序
3.这时NameNode会把block块的位置信息返回给客户端,这时客户端会得到一个客户端会得到一个 FSDataInputStream输入流对象
4.客户端会根据每个block块的位置,选择一个就近的DataNode去读取相应的block块中的内容
5.客户端以packet为单位接收,先在本地缓存,然后写入目标文件
6.最后客户端把所有的block合并成一个文件。