(1)客户端通过在DistributedFileSystem中调用create()来创建文件。
(2)DistributedFileSystem 使用RPC去调用namenode,在HDFS命名空间创一个新的文件。HDFS返回一个文件系统数据输出流FSDataOutputStream,让client开始写入数据。 FSDataOutputStream控制一个DFSOutputStream,负责处理datanode和namenode之间的通信。
(3)client写入数据时,DFSOutputStream将文件切分一个个的Block,对于每个block有分成一个个数据包写入数据队列。数据队列在数据节点管线中流动。
(4)对于任意一个数据包,首先写入管线中第一个的datanode,第一个节点会存储包并且发送给管线中的第二个datanode。同样地,第二个datanode存储包并且传给管线中的第三个数据节点。与此同时,client会将当前block的下一个包发给第一个datanode。
(5)DFSOutputStream也有一个内部的包队列来等待datanode收到确认。一个Block只有其所有的包在被管线中所有的节点确认后才会被移除出确认队列。
(6)client完成数据的写入后,就会在流中调用close()。
(7)向namenode节点发生写文件已经完成的消息。与此同步的,datanode主动向namenode汇报所存储文件块的位置信息
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。