《从零开始学Hadoop大数据分析(视频教学版)》 —3.2.6 HDFS读文件流程
【摘要】 本节书摘来自华章计算机《从零开始学Hadoop大数据分析(视频教学版)》 一书中第3章,第3.2.6节,作者是温春水 毕洁馨 。
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 读取步骤
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)