2

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

我目前正在研究 Hadoop 的复制模型,但我处于死胡同。我从《Oreilly Hadoop The Definitive Guide 3rd Edition Jan 2012》一书中学习。要回答这个问题,我首先需要阅读本书下面的文字。

在第 73 页,有以下内容:

分布式文件系统为客户端返回一个FSDataOutputStream Hadoop 分布式文件系统开始写入数据。就像在读取的情况下,FSDataOutputStream包装了一个DFSOutput Stream,它处理与数据节点和名称节点的通信。当客户端写入数据时(步骤 3) ,

DFSOutputStream将其拆分为数据包,并将其写入内部队列,称为数据队列。数据队列由 Data Streamer 使用,它的职责是通过选择合适的数据节点列表来请求 namenode 分配新块以存储副本。"*

如您所见,DFSOutputStream有一个数据包数据队列。数据队列正在被 DataStreamer 消耗,它要求 namenode 分配新块。

我的问题:

这是如何运作的?

Namenode 是如何分配新区块的?

同样的问题,换个方式问:Namenode如何创建合适的Datanodes列表?

我在互联网上或书中找不到任何关于此的内容。这本书从高层次解释了这个过程。

我真的很感谢你的时间帮助我,我谢谢你!

4

3 回答 3

1

它是一种可插拔的、基于策略的算法。有关详细信息,请参阅副本放置

于 2012-06-12T19:18:14.547 回答
1

看看Apache HDFS 设计在此处输入图像描述

例如,当复制因子为 3 时,HDFS 的放置策略如下来自grepcode

** 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 {

此策略可减少机架间写入流量,从而提高写入性能。

机架故障的几率远小于节点故障;本政策不影响数据可靠性和可用性保证。

使用此策略,文件的副本不会在机架上均匀分布。

三分之一的副本在一个节点上

三分之二的副本在一个机架上

另外三分之一均匀分布在剩余的机架上。

此策略在不影响数据可靠性或读取性能的情况下提高了写入性能。

==>

第一个和第三个副本存在于一个 RAC 上,第二个副本存在于另一个 RAC(远程)上

于 2015-11-02T13:01:32.307 回答
1

我可能会看到 2 个不同的问题,因为您还提到了DataStreamer.

您可以在“The Hadoop Distributed File System by Konstantin Shvachko, Hairong Kuang, Sanjay Radia, Robert Chansler”中找到这两个答案

1)如何从客户端(DataStreamer)请求块?

当客户端写入时,它首先要求 NameNode 选择 DataNodes 来托管文件第一个块的副本。客户端从节点到节点组织管道并发送数据。当第一个块被填满时,客户端请求选择新的 DataNode 来托管下一个块的副本。一个新的管道被组织起来,客户端发送文件的更多字节。DataNode 的每种选择都可能不同。

2) NameNode 如何创建合适的数据节点列表?

正如其他用户已经回答的那样,Hadoop 允许此策略可配置,但作为默认副本放置策略:

创建新块时,HDFS 将第一个副本放在 writer 所在的节点上,第二个和第三个副本在不同机架的两个不同节点上,其余的放在随机节点上,限制不超过在一个节点上放置一个副本,当副本数小于机架数的两倍时,同一机架中最多放置两个副本。

于 2015-11-02T12:00:59.203 回答