读取流程:
1,客户端通过RPC请求访问NameNode(请求读取)
2,NameNode查询请求的文件的元数据,获取到文件的储存路径,然后将文件所对应的全部或者部分文件块的储存地址放入一个队列中,返回给客户端.
3,客户端收到队列之后,依次遍历队列,读取文件块.
4,客户端从队列中获取到第一个文件块的储存地址,从中选出一个最近的DataNode来进行读取.
5.读取完成之后校验文件块的大小是否符合,如果符合就继续读取第二个文件块;如果不符合就通知NameNode当前文件块已经损坏,然后从其他节点重新读取当前的文件块的其他复本.
6.当客户端将这次的文件块全部读取完成之后,会再次访问NameNode请求下一批文件块的地址
7.当客户端读取完所有的文件块之后,通知NameNode关闭文件