Hadoop复制模型-DataStreamer/Namenode
首先,感谢您阅读我的问题 我目前正在研究Hadoop的复制模型,但我已经走到了死胡同。我从《奥雷利·哈多普权威指南》一书中学习,2012年1月第3版。为了回答这个问题,我首先需要阅读这本书下面的文字 在第73页,有以下内容: “DistributedFileSystem为Hadoop分布式文件系统开始向其写入数据的客户端返回一个FSDataOutputStream。与读取情况一样,FSDataOutputStream包装了一个DFSOutput流,该流处理与datanode和namenode的通信。当客户端写入数据时(步骤3) DFSOutputStream将其拆分为数据包,并将数据包写入称为数据队列的内部队列。数据流使用数据队列,其职责是通过挑选合适的数据节点列表来存储副本,要求namenode分配新块。”* 如您所见,DFSOutputStream有一个数据包队列。该数据队列正被要求namenode分配新块的DataStreamer使用 我的问题: 这是如何工作的? 名称节点如何分配新块? 同样的问题,用不同的方式提问:名称节点如何创建合适的数据节点列表? 我在网上或书中找不到任何关于这方面的信息。这本书从高层次上解释了这一过程Hadoop复制模型-DataStreamer/Namenode,hadoop,hdfs,Hadoop,Hdfs,首先,感谢您阅读我的问题 我目前正在研究Hadoop的复制模型,但我已经走到了死胡同。我从《奥雷利·哈多普权威指南》一书中学习,2012年1月第3版。为了回答这个问题,我首先需要阅读这本书下面的文字 在第73页,有以下内容: “DistributedFileSystem为Hadoop分布式文件系统开始向其写入数据的客户端返回一个FSDataOutputStream。与读取情况一样,FSDataOutputStream包装了一个DFSOutput流,该流处理与datanode和namenode的通
非常感谢您花时间帮助我,谢谢!这是一种可插拔的基于策略的算法。有关更多信息,请参阅。我可能会看到两个不同的问题,因为您还提到了
数据流
您可以在“Konstantin Shvachko、Hairong Kuang、Sanjay Radia、Robert Chansler的Hadoop分布式文件系统”中找到这两个答案
1) 如何从客户端(DataStreamer)请求块
当客户端写入时,它首先要求NameNode选择DataNodes
托管文件第一个块的副本。客户端组织
从一个节点到另一个节点并发送数据的管道
填充后,客户端请求选择新的数据节点作为宿主
下一个块的副本。组织了一个新的管道,并且
客户端发送文件的更多字节。每个数据节点的选择
可能会有所不同
2) NameNode如何创建合适数据节点的列表
正如其他用户已经回答的,Hadoop允许配置此策略,但作为默认副本放置策略:
创建新块时,HDFS将第一个副本放置在
写入程序所在的节点,第二个和第三个
不同机架中两个不同节点上的副本,以及其他
放置在随机节点上,限制不超过
一个复制副本放置在一个节点上,且不超过两个复制副本
当复制副本数量较少时,将放置在同一机架中
超过机架数量的两倍
看看
例如,当复制因子为3时,HDFS的放置策略如下所示
此策略可减少机架间写入通信量,从而提高写入性能
机架故障的几率远小于节点故障的几率;此策略不会影响数据可靠性和可用性保证
使用此策略,文件的副本不会均匀分布在机架上
三分之一的副本位于一个节点上
三分之二的复制副本位于一个机架上
另外三分之一均匀分布在其余机架上
此策略在不影响数据可靠性或读取性能的情况下提高了写入性能
==>
第一个和第三个复制副本存在于一个RAC上,第二个复制副本存在于另一个RAC上(远程)感谢您花时间回答我的问题。您给我的参考资料是解释默认复制系数(3),namenode如何在复制系数为10或100的情况下工作?您能给我一个“可插拔,“基于策略的算法”,我1,5个月大,使用Hadoop。
** The class is responsible for choosing the desired number of targets
* for placing block replicas.
* The replica placement strategy is that if the writer is on a datanode,
* the 1st replica is placed on the local machine,
* otherwise a random datanode. The 2nd replica is placed on a datanode
* that is on a different rack. The 3rd replica is placed on a datanode
* which is on a different node of the rack as the second replica.
*/
@InterfaceAudience.Private
public class BlockPlacementPolicyDefault extends BlockPlacementPolicy {