Hadoop的 - 映射器总如何确定(hadoop - how total mappers are

2019-10-18 07:15发布

我是新来Hadoop和刚刚安装Oracle的VirtualBox和hortonworks的沙盒。 我的话,下载最新版本的Hadoop和进口的jar文件到我的Java程序。 我复制一个样本单词计数程序,并创建了一个新的jar文件。 我运行这个jar文件使用沙箱的工作。 该单词计数按预期工作完全正常。 然而,在我的工作状态页面,我看到映射器的数量,我输入文件中被确定为28.我在输入文件中,我有以下行。

拉梅什在XXXXXXXXXX XX XX XXXXX学习XXXXXXXXX。

总映射器是如何确定的28个?

我加了下面一行到我wordcount.java程序来检查。

FileInputFormat.setMaxInputSplitSize(job, 2);

另外,我想知道,如果输入的文件只能包含两行。 (IE)的假设,如果我有一个输入文件,如下图所示。

ROW1,ROW2,ROW3,ROW4,ROW5,ROW6 ....... row20

我是否应该拆分输入文件分成20个不同的文件的每个只有2行?

Answer 1:

这意味着,由于您的输入文件分割成在HDFS大约28件(块),你说28个地图任务是scheduled-但是,不是可以不共有28个平行的地图任务虽然。 并行将取决于你必须在你的集群插槽的数量。 我说的是在Apache的Hadoop的方面。 我不知道,如果霍顿作品没有拒绝修改本。

Hadoop的喜欢和大文件的工作,所以,你想你的输入文件拆分到20个不同的文件吗?



Answer 2:

HDFS块和MapReduce分割2米不同的东西。 块是数据的物理分割而分割只是一个MR工作期间完成的逻辑划分。 它的职责InputFormat从给定的一组数据创建的拆分,并根据拆分映射器的数量决定的数量。 当您使用setMaxInputSplitSize ,你否决这种行为,并给自己的分割大小。 但给人一种非常小的值setMaxInputSplitSize会矫枉过正,因为会有很多非常小的拆分,而你最终有很多不必要的地图任务。

其实我看不出有什么必要让你使用FileInputFormat.setMaxInputSplitSize(job, 2); 在您的WC程序。 此外,它看起来像你已经走错了2在这里。 它不是在一个文件中的行数。 它是分割的大小,在long ,你想有你的MR工作。 你可以有任意数量的文件中的行,你会为你的MR投入使用。

这听起来好不好?



文章来源: hadoop - how total mappers are determined