读取流程
流程图:
1.客户端向NameNode发送读的请求
2.NameNode根据客户端的请求,根据内存索引查找客户端要查的文件对应的文件块,如果没有那么告诉客户端。如果有那么将文件块在那些服务器上以及具体的位置在哪儿告诉客户端。客户端根据namenode返回的信息,读取最近的服务器的文件。
1) 客户端调用 DistributedFileSystem 的 Open() 方法打开文件。
2) DistributedFileSystem 用 RPC 连接到 NameNode,请求获取文件的数据块的信息;NameNode 返回文件的部分或者全部数据块列表;对于每个数据块,NameNode 都会返回该数据块副本的
3) 客户端调用 FSDataInputStream 的 Read() 方法开始读取数据。
4) FSInputStream 连接保存此文件第一个数据块的最近的 DataNode,并以数据流的形式读取数据;客户端多次调用 Read(),直到到达数据块结束位置。
5) FSInputStream连接保存此文件下一个数据块的最近的 DataNode,并读取数据。
6) 当客户端读取完所有数据块的数据后,调用 FSDataInputStream 的 Close() 方法。
在读取数据的过程中,如果客