异构Hadoop集群在HDFS中的数据放置和分布



我安装了Apache Hadoop 2.x,其中有5个异构节点,其中一个节点纯粹专用于NameNode。

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

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

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

我的问题是:

  1. 我们能否设法在每个DN上放置数据块,这样就不需要在特定DN上移动映射器的数据。可以通过hdfs的"put"命令来完成吗?

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

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

块的位置完全取决于hadoop,它将在内部管理块的位置,您只能通过

配置复制的数量。

dfs.replication.factor

dfs.block.size

完成你想要的。

如果你想检查块的位置,你可以打开HDFS的Web UI

Namenode: 50070

并浏览到这里的文件,它将显示块在所有节点中的位置

相关内容

  • 没有找到相关文章

最新更新