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

举报
华章计算机 发表于 2019/12/14 22:59:53 2019/12/14
【摘要】 本节书摘来自华章计算机《从零开始学Hadoop大数据分析(视频教学版)》 一书中第3章,第3.2.7节,作者是温春水 毕洁馨 。

3.2.7  HDFS写文件流程

  对于存储在HDFS上的文件也可以写入内容,可以通过客户端发送写文件的请求,主要步骤如下:

  (1)客户端调用DistributedFileSystem对象的create()方法新建文件。

  (2)DistributedFileSystem会对NameNode创建一个RPC调用,在文件系统的命名空间中创建一个新文件,需要注意的是,此刻该文件中还没有相应的数据块。

  (3)NameNode通过执行不同的检查来确保这个文件不存在而且客户端有新建该文件的权限。如果这些检查都通过了,NameNode就会为创建新文件写下一条记录;反之,如果文件创建失败,则向客户端抛出一个IOException异常。

  (4)随后DistributedFileSystem向客户端返回一个FSDataOutputStream对象,这样客户端就可以写入数据了。和读取事件类似,FSDataOutputStream封装一个DFSOutputStream对象,该对象会负责处理DataNode和NameNode之间的通信。在客户端写入数据的时候,DFSOutputStream将它分成一个个的数据包,并且写入内部队列,被称之为“数据队列”(data queue)。

  (5)DataStream处理数据队列,它的任务是选出适合用来存储数据副本的一组DataNode,并据此要求NameNode分配新的数据块。这一组DataNode会构成一条管线,DataStream会将数据包流式传输到管线中的第一个DataNode,然后依次存储并发送给下一个DataNode。

  (6)DFSOutPutStream也维护着一个内部数据包队列来等待DataNode的收到确认回执,称为“确认队列”(ask queue)。收到管道中所有DataNode确认信息后,该数据包才会从确认队列删除。

  (7)客户端完成数据的写入后,会对数据流调用close()方法,如图3.6所示。

 image.png

图3.6  数据流调用步骤


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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