1.客户端向namenode发送读取数据的请求。
2.namenode接受请求,首先判断当前用户是否具备读取数据的权限,如果没有直接报错;如果有,接着判断在指定的路径下是否有这个文件,如果没有,直接报错;如果有,根据机架感知原理,网络拓扑关系,副本机制,返回部分或者全部的block块所在的datanode的地址。
3.当接收部分或者全部的block列表后,然后进行并行连接datanode节点后,开始读取数据。
4.当从这些地址中将block块读取完成后,如果之前返回的是部分block,此时再次请求namenode,将剩余部分或者全部的block的datanode的列表返回来,接着再运行第三步,开启并行读取数据操作,直至所有的block全部读取下来。
5.按照block进行排序,然后一个一个的拼接在一起,合并成一个最终的文件。