《从零开始学Hadoop大数据分析(视频教学版)》 —3.2.6 HDFS读文件流程
3.2.6 HDFS读文件流程
前面介绍了HDFS的核心概念,接下来介绍HDFS读写文件的流程。对于存储在HDFS上的文件,我们可以通过客户端发送读文件请求,主要步骤如下:
(1)客户端通过调用FileSystem对象的open()方法打开要读取的文件,对于HDFS来说,这个对象是DistributedFileSystem的一个实例。
(2)DistributedFileSystem通过使用远程过程调用(RPC)来调用NameNode,以确定文件起始块的位置。
(3)对于每个块,NameNode返回到存有该块副本的DataNode地址。此外,这些DataNode根据它们与客户端的距离来排序。如果该客户端本身就是一个DataNode,那么该客户端将会从包含有相应数据块副本的本地DataNode读取数据。DistributedFileSystem类返回一个FSDataInputStream对象给客户端并读取数据,FSDataInputStream转而封装DFSInputStream对象,该对象管理着DataNode和NameNode的I/O。接着,客户端对这个输入流调用read()方法。
(4)存储着文件起始几个块的DataNode地址的DFSInputStream,接着会连接距离最近的文件中第一个块所在的DataNode。通过对数据流的反复调用read()方法,实现将数据从DataNode传输到客户端。
(5)当快到达块的末端时,DFSInputStream会关闭与该DataNode的连接,然后寻找下一个块最佳的DataNode。
(6)当客户端从流中读取数据时,块是按照打开的DFSInputStream与DataNode新建连接的顺序进行读取的。它也会根据需要询问NameNode从而检索下一批数据块的DataNode的位置。一旦客户端完成读取,就对FSDataInputStream调用close()方法,如图3.5所示。
图3.5 读取步骤
- 点赞
- 收藏
- 关注作者
评论(0)