Hadoop写数据流程
2023-04-05 本文已影响0人
ssttIsme
![](https://img.haomeiwen.com/i5128967/55c227ee052a7db0.png)
客户端准备把me.avi传送到集群,首先HDFSclient(HDFS客户端)创建一个分布式文件系统(DistributedFileSystem),然后向NameNode请求上传me.avi到/user/路径下。NameNode检查客户端有无写权限,没有写权限直接拒绝。然后检查文件是否存在,如果文件存在也直接写入失败。NameNode检查没问题的话相应客户端可以上传。客户端请求上传第一个块,要NameNode返回上传到哪里。NameNode返回dn1,dn2,dn3三个节点(考虑了节点是否可用、负载均衡、节点距离最近等因素),表示采用这三个节点进行存储。客户端创建数据流FSDataOutputStream往外写数据。数据流先选择第一个DataNode建立通道,再与其他DataNode建立通道,然后进行应答。数据流先将数据传送给第一个DataNode,一份数据往磁盘上写,另一份在内存中直接传给下一个节点。一次发(最小单位个数据-64k)Packet。【这个数据怎么产生?创建流的时候先创建了缓冲队列先形成chunk512+4字节,多个chunk512+4字节形成Packet,多个Packet又放到缓冲队列,然后进行发送。】每次发送完Packet对象对方都要给一个应答是否接收成功,如果接收成功,在ack队列同步的缓冲Packet才会被删除。