hdfs写(存储)数据原理总结
在3个datanode中,当备份设置为2(两个备份时),这时大文件的每个数据块都会备份2个,并且随机存储在两个不同的datanode中,甚至数据块的2个备份一个存储在datanode01,一个存储在datanode03,
这个过程可以依据NN根据客户端上传文件的副本数(为2),根据机架感知策略选取指定数量的DN节点返回
比如,客户端与datanode01发起通道建立请求,datanode01节点向通道中的(距离当前dn01距离最近)下一个节点datanode03发送建立通道请求,但是在自己的hdfs中为什么nn03距离nn01最近呢?猜测:可能是随机的与nn03建立通道,真实的hdfs集群各节点之间会产生距离,而自己的hdfs集群不会
这样通道中的dn01节点收到packet之后,落盘(检验)存储,将packet发送到通道的下一个节点dn03!
每个节点在收到packet后,向客户端发送ack确认消息!
⑧一个块的数据传输完成之后,通道关闭,DN向NN上报消息,已经收到某个块
⑨第一个块传输完成,第二块开始传输,依次重复⑤-⑧,直到最后一个块传输完成,NN向客户端响应传输完成!
客户端关闭输出流