HDFS数据读取流程

1:Client 发起文件读取请求,通过 RPC 与 NameNode 建立通讯,NameNode检查目标文件,来确定请求文件 block块的位置信息

2:NameNode会视情况返回文件的部分或者全部block块列表,对于每个block块,NameNode 都会返回含有该 block副本的 DataNode 地址

3:这些返回的 DataNode 地址,会按照集群拓扑结构得出 DataNode 与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离 Client 近的排靠前;心跳机制中超时汇报的 DN 状态为 STALE,这样的排靠后;

4:Client 选取排序靠前的 DataNode 调用FSDataInputSteam的read方法来读取 block块数据,如果客户端本身就是DataNode,那么将从本地直接获取block块数据

5:当读完一批的 block块后,若文件读取还没有结束,客户端会继续向NameNode 获取下一批的 block 列表,继续读取

6.所有block块读取完成后,Client调用FSDataInputStream.close()方法,关闭输入流,并将读取来所有的 block块合并成一个完整的最终文件

 

猜你喜欢

转载自blog.csdn.net/lxpqxl/article/details/102968731
今日推荐