Client将数据写入HDFS流程

1.Client调用DistributedFileSystem对象的create()方法,创建一个文件输出流

2.DistributedFileSystem对namenode创建一个RPC调用,在文件系统的命名空间中创建一个新文件。

3.Namenode执行各种不同的检查以确保这个文件不存在,并且客户端有创建该文件的权限。如果这些检查均通过,namenode就会为创建新文件记录一条记录,否则,文件创建失败,向Client抛出IOException,DistributedFileSystem向Client返回一个FSDataOutputStream队形,Client可以开始写入数据。

4.DFSOutputStream将它分成一个个的数据包,并写入内部队列。DataStreamer处理数据队列,它的责任时根据datanode列表来要求namenode分配适合新块来存储数据备份。这一组datanode构成一个管线---我们假设副本数为3,管路中有3个节点,DataStreamer将数据包流式床书到管线中第一个datanode,该dananode存储数据包并将它发送到管线中的第二个datanode,同样地,第二个datanode存储该数据包并且发送给管县中的第3个。

5.DFSOutputStream也维护着一个内部数据包队列来等待datanode的收到确认回执(ack queue)。当收到管道中所有datanode确认信息后,该数据包才会从确认队列删除。

6.Client完成数据的写入后,回对数据流调用close()方法

7.将剩余所有的数据包写入datanode管线中,并且在练习namenode且发送文件写入完成信号之前


你可能感兴趣的:(Client将数据写入HDFS流程)