2015-10-12 33 views
0

我已经安装了Apache Hadoop 2.x以及5个异构节点,其中一个节点纯粹专用于NameNode。用于异构Hadoop集群的HDFS中的数据分布和分布

我正在使用下面的命令将我的输入文件放入HDFS

$ hdfs dfs -put /home/hduser/myspace/data /user/hduser/inputfile 

HDFS复制在三个DataNodes (DN)该输入文件时,它意味着一个第四DataNode不具有输入块。如果我使用8个映射器(通过使用NLineInputFormat()方法设置分割大小),那么将这8个映射器分配给所有4个DN。我认为它应该是。在这种情况下,来自其他DN的数据块将移至第4个DN,由分配给它的映射器计算,这会增加总体执行时间。

我的问题是:

  1. 我们能否以某种方式设法将数据块上的每个DNS,这样就没有必要对一个特定的DN映射器移动数据。它可以通过hdfs的“放”命令来完成吗?

  2. 同样在异构集群的情况下,我们可以根据节点的计算能力将不同大小的数据放在不同的DN上吗?

回答

0

我们无法管理将数据块放在每个DN上。您提到HDFS将文件复制到3个DN。只有在文件大小小于块大小的情况下才是如此。 HDFS通过将文件分成多个块来复制数据。因此,文件数据(块)分布在所有4个DN上的可能性更大。

+0

让我们有一个大小为40 MB的输入文件。当我们把它放到hdfs中时,它会变成3个DN(让DN1,DN2,DN3),那么如果我们使用4个映射器运行,在DN4上运行的映射器将如何得到输入? –

0

块位置完全取决于Hadoop和将要管理的块放置在内部可以通过

dfs.replication.factor

或大小由

只配置复制的数量

dfs.block.size

块来完成你的愿望。

如果您要检查的块配置,你可以打开HDFS的Web UI是

的Namenode:50070

,并浏览到该文件在这里它会告诉你块放置在所有节点中。

+0

这是否意味着如果我想在DN4本地创建数据块,那么我必须将复制因子设置为4? –

+0

是的,它会帮助你或一个奇怪的方法是停止一个Datanode,然后dn4,并把数据它肯定会放在那里副本。 –

相关问题