《从零开始学Hadoop大数据分析(视频教学版)》 —3.2.7 HDFS写文件流程
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所示。
图3.6 数据流调用步骤
- 点赞
- 收藏
- 关注作者
评论(0)