用于异构Hadoop集群的HDFS中的数据放置和分发

时间:2015-10-12 14:44:53

标签: java hadoop mapreduce hdfs bigdata

我已经安装了Apache Hadoop 2.x个5个异构节点,其中一个节点完全专用于NameNode。

我使用以下命令将输入​​文件放入HDFS

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

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

我的问题是:

  1. 我们能否以某种方式设法在每个DN上放置数据块,以便不需要为特定DN上的映射器移动数据。可以通过hdfs的“put”命令完成吗?

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

2 个答案:

答案 0 :(得分:0)

我们无法设置在每个DN上放置数据块。您提到HDFS将文件复制到3个DN。仅当文件大小小于块大小时才会出现这种情况。 HDFS通过将文件分成多个块来复制数据。因此,文件数据(块)更有可能分布在所有4个DN上。

答案 1 :(得分:0)

块放置完全取决于hadoop,它将在内部管理块放置,您只能通过配置复制次数

  

dfs.replication.factor

或大小

  

dfs.block.size

阻止你完成你想要的东西。

如果要检查块放置,可以打开HDFS的Web UI

  

的Namenode:50070

并浏览到此处的文件,它将显示所有节点中的块位置。