《从零开始学Hadoop大数据分析(视频教学版)》 —3.2.6 HDFS读文件流程

举报
华章计算机 发表于 2019/12/14 22:58:16 2019/12/14
【摘要】 本节书摘来自华章计算机《从零开始学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所示。

 image.png

图3.5  读取步骤


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。