1.1 首先由客户端client向分布式文件系统(HFS)发出写入的命令 .
1.2 HFS向主节点(NameNode , 后边称为NN)发出写入请求 , NN收到请求后进行一系列的检查(检查是否有权限 , 是否合法 , 路径是否正确等等) .
2. 无误后NN告诉client客户端可以存储并返回距上传位置最近且不忙的从节点(DataNode , 后边称为DN) 信息
3. client接收到可以存储的信息后向文件系统数据输出流(FSData Outputstream)发出写入数据的命令 .
4. 写入数据前client客户端会将文件数据依次切分成最大128M的block块 , 传输时再次将block块的数据切分成packet包 , 每个packet包最大64kb , 每次传输一个packet包 .
5. DN接收packet数据包 , 每接收一个packet包都会返回一个ack应答 , client客户端接收到ack应答后才会开始传输下一个packet包 , 当第一个block块写满128M后才会开始写入下一个block块 .
6. 当第一个DN , node1 接收到一个完整的packet包的同时会向复制收到的数据包发给node2 , node2收到一个完整的packet包也会向node1返回一个ack应答 , 同时再复制一份packet包发给node3, node3接收到一个完整的packet包也会向node2返回一个ack应答. 如此三个DN之间会产生一个传输packet , 返回ack 的链条. DN需要定期的向NN汇报自己存储的block块信息 .
7. 循环上述4-7步直至所有block块传输完毕 , 即文件已经被写入成功
8. 最后客户端会和NN相互确认数据保存完成 , 并汇报不能使用的DN信息
(博主小白 , 有问题大佬轻喷)