2011-10-03 103 views
14

当我上传文件到HDFS,如果我的复制因子设置为1,然后将文件分割会驻留在一台机器上或拆分将被分发到整个网络的多台机器?HDFS复制因子

hadoop fs -D dfs.replication=1 -copyFromLocal file.txt /user/ablimit 

回答

11

按照Hadoop : Definitive Guide

Hadoop的默认策略是把第一个副本相同的节点客户端(在集群外运行 客户,一个节点是随机选择的,虽然系统 尝试不挑选太满或太忙的节点)。第二个复制品放置在与第一个(机架外)不同的机架上,随机选择。第三个副本放置在与第二个副本相同的机架上,但在随机选择的不同节点上。尽管系统试图避免在同一机架上放置太多复制品,但其他复制品 被放置在群集上的随机节点上。

这个逻辑很有意义,因为它减少了不同节点之间的网络抖动。但是,这本书于2009年发布,Hadoop框架发生了很多变化。

我认为这取决于客户端是否与Hadoop节点相同。如果客户端是Hadoop节点,则所有分割将位于同一节点上。尽管集群中有多个节点,但这并没有提供更好的读/写吞吐量。如果客户端与Hadoop节点不同,那么随机为每个分裂选择节点,因此分裂分散在集群中的节点上。现在,这提供了更好的读/写吞吐量。写作到多个节点的

一个优点是,即使节点的一个出现故障,一对夫妇分裂的可能是下跌,但至少有一些数据可以以某种方式从剩余的分裂恢复。

+0

我想你最后的陈述是不正确的。如果其中一个节点关闭并且有输入数据块,则NameNode无法恢复文件,甚至无法分配剩余的块(假设复制因子为1) –

+0

#brain storm,您是绝对正确的。 –

+0

块位置选择策略是记录在不同的Hadoop的文档,请https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Replica_Placement:_The_First_Baby_Steps。 –

1

如果设置复制为1,那么该文件将只存在于客户端节点上,也就是从那里你上传该文件的节点。

+1

这是真的_iff_客户端节点也运行DataNode服务。 –

+0

即使客户端本地数据节点已满,情况是否如此?即复制失败而不是使用不同的DN? – Wheezil

0
  • 如果您的群集是单节点,那么当您上传文件时,它将根据块大小进行溢出并保留在单台机器上。
  • 如果群集是多节点然后当你上传将根据块大小洒出一个文件,它会通过管道被分配到不同的数据节点的集群和NameNode的将决定应将数据在集群中移动。

HDFS复制因子用于复制数据(即)如果您的复制因子是2,那么您上传到HDFS的所有数据都将具有副本。

+0

如果更改hdfs-site中的复制因子值,该怎么办?xml文件上传到hdfs之后 - 系统会自动复制它,还是需要执行hdfs平衡器命令? –