为了账号安全,请及时绑定邮箱和手机立即绑定

为何写流程中是由DataNode1通知DataNode2,再由DataNode2通知DataNode3,而不是DataNode1同时通知DataNode2和DataNode3?

个人觉得后者对降低写的latency更友好吧

正在回答

3 回答

 在向HDFS的写操作中,不得不提一下“数据流管道”。数据流管道在Google实现他们的分布式文件系统(GFS)时就已引入,其目的是:在写一份数据的多个副本时,可以充分利用集群中每一台机器的带宽,避免网络瓶颈和高延时的连接,最小化推送所有数据的延时。  其实这里我可能表述的不太准确,Client在保存数据的过程当中,将数据发送到第一个数据节点DateNode 1,然后在第一个DateNode节点在本地保存数据的同时,将数据推送到第二个数据节点DateNode 2,同理在第二个节点本地保存数据的同时,也会由第二个数据节点将数据同送给第三个数据节点DateNode 3。  这样啊,每个节点都能承担写数据时的部分网络流量,降低了客户端发送多分数据时对网络的冲击

2 回复 有任何疑惑可以回复我~
#1

慕UI6419280

您好,在很多个节点的时候,如何选择,比如说有100个节点,client随机选择有空间的datanode吗?还有datanode是如何选择下一个datanode的?
2018-12-17 回复 有任何疑惑可以回复我~
#2

叁金 回复 慕UI6419280

这个比较复杂,需要考虑可靠性 网络带宽等情况。 总结几点吧 1. 第一个节点是就近原则,namenode找一个本机架的,空间足够的datanode存放 2. 第二个节点就需要考虑备份容灾了,会放在不同机架的节点上,保障数据的可用性(如果没开机架感知。。。可能根据其他设计找了一个吧。) 3. 第三个节点(默认备份三份)好像就比较随意了。 在第二个节点的机架架再找一个即可 4. 其他备份就随便扔了。 尽量不同机架即可 大概就是这样吧。 这样可以提供较好的稳定性和负载均衡。同时可以使数据均匀分布
2018-12-17 回复 有任何疑惑可以回复我~
#3

慕仰2907144 回复 叁金

老师好,请问当第一个block写入到DataNode时会进行备份,必须备份了三个DataNode才会进行第二个block的写入吗?也就是说会不会当第一个block的第二个DataNode副本保存的同时,第二个block也在写入DataNode呢?
2019-11-09 回复 有任何疑惑可以回复我~

写的话也是按照最近的dataNODE来进行存储吧

0 回复 有任何疑惑可以回复我~

客户端要向HDFS写数据,首先要跟namenode通信以确认可以写文件并获得接收文件block的datanode,然后,客户端按顺序将文件逐个block传递给相应datanode,并由接收到block的datanode负责向其他datanode复制block的副本,百度到的,老师的DataNode-2和DataNode-3应该是DataNode-1的副本

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为何写流程中是由DataNode1通知DataNode2,再由DataNode2通知DataNode3,而不是DataNode1同时通知DataNode2和DataNode3?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信