来自“White,Tom;Hadoop:权威指南;第 3 章,Hadoop 分布式文件系统,文件写入剖析”:
... DataStreamer 将数据包流式传输到管道中的第一个数据节点,该数据节点存储每个数据包并将其转发到管道中的第二个数据节点。同样,第二个数据节点存储数据包并将其转发到...中的第三个(也是最后一个)数据节点。
它没有提到数据节点如何知道哪个是它必须发送数据包的下一个数据节点。
Namenode 知道所有的数据节点和机架位置。Datanodes不知道彼此。
客户端在写入期间首先联系 Namenode,然后发送数据节点地址以进行副本写入
相关问题 - Hadoop 复制模型 - DataStreamer/Namenode
关于使用哪些地址,
HDFS 的放置策略是,如果 writer 在 datanode 上,则将一个副本放在本地机器上,否则在与 writer 相同机架的随机 datanode 上,另一个副本在不同(远程)机架中的节点上,并且最后在同一个远程机架的不同节点上