Hadoop复制模型-DataStreamer/Namenode

Hadoop复制模型-DataStreamer/Namenode,hadoop,hdfs,Hadoop,Hdfs,首先,感谢您阅读我的问题 我目前正在研究Hadoop的复制模型,但我已经走到了死胡同。我从《奥雷利·哈多普权威指南》一书中学习,2012年1月第3版。为了回答这个问题,我首先需要阅读这本书下面的文字 在第73页,有以下内容: “DistributedFileSystem为Hadoop分布式文件系统开始向其写入数据的客户端返回一个FSDataOutputStream。与读取情况一样,FSDataOutputStream包装了一个DFSOutput流,该流处理与datanode和namenode的通

首先,感谢您阅读我的问题

我目前正在研究Hadoop的复制模型,但我已经走到了死胡同。我从《奥雷利·哈多普权威指南》一书中学习,2012年1月第3版。为了回答这个问题,我首先需要阅读这本书下面的文字

在第73页,有以下内容:

“DistributedFileSystem为Hadoop分布式文件系统开始向其写入数据的客户端返回一个FSDataOutputStream。与读取情况一样,FSDataOutputStream包装了一个DFSOutput流,该流处理与datanode和namenode的通信。当客户端写入数据时(步骤3)

DFSOutputStream将其拆分为数据包,并将数据包写入称为数据队列的内部队列。数据流使用数据队列,其职责是通过挑选合适的数据节点列表来存储副本,要求namenode分配新块。”*

如您所见,DFSOutputStream有一个数据包队列。该数据队列正被要求namenode分配新块的DataStreamer使用

我的问题:

这是如何工作的?

名称节点如何分配新块?

同样的问题,用不同的方式提问:名称节点如何创建合适的数据节点列表?

我在网上或书中找不到任何关于这方面的信息。这本书从高层次上解释了这一过程


非常感谢您花时间帮助我,谢谢!

这是一种可插拔的基于策略的算法。有关更多信息,请参阅。

我可能会看到两个不同的问题,因为您还提到了
数据流

您可以在“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 {