hadoop - 如何确定总映射器

时间:2013-06-19 15:49:55

标签: hadoop hadoop-partitioning

我是hadoop的新手,刚刚安装了oracle的virtualbox和hortonworks的沙箱。然后,我下载了最新版本的hadoop并将jar文件导入我的java程序。我复制了一个示例wordcount程序并创建了一个新的jar文件。我使用沙箱将此jar文件作为作业运行。 wordcount按预期完美地运行。但是,在我的作业状态页面中,我看到输入文件的映射器数量被确定为28.在我的输入文件中,我有以下行。

Ramesh正在XXXXXXXXXX XX XXXXX XX XXXXXXXXX学习。

总映射器如何确定为28?

我将以下行添加到我的wordcount.java程序中进行检查。

FileInputFormat.setMaxInputSplitSize(job, 2);

另外,我想知道输入文件是否只能包含2行。 (即)假设我有一个输入文件,如下所示。

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

我应该将输入文件拆分为20个不同的文件,每个文件只有2行吗?

2 个答案:

答案 0 :(得分:3)

HDFS块和MapReduce拆分是两回事。块是数据的物理划分,而Split只是在MR作业期间完成的逻辑划分。 InputFormat的任务是根据给定的集合数据创建拆分,并根据Splits的数量确定Mappers的数量。当您使用setMaxInputSplitSize时,您会否决此行为并给出您自己的分割大小。但是给setMaxInputSplitSize一个非常小的值将是一个过度杀伤,因为会有很多非常小的Splits,你最终会有很多不必要的Map任务。

实际上我认为您不需要在WC程序中使用FileInputFormat.setMaxInputSplitSize(job, 2);。此外,您似乎错误地认为2。它不是文件中的行数。这是您希望在MR工作中使用的long分割尺寸。您可以在文件中包含任意数量的行作为MR输入。

这听起来不错吗?

答案 1 :(得分:1)

这意味着您的输入文件在HDFS中被分成大约28个部分(块),因为您说28个地图任务被安排 - 但是,不是可能不是总共28个并行地图​​任务。并行性取决于群集中的插槽数量。我正在谈论Apache Hadoop。我不知道Horton的作品是否对此有任何修改。

Hadoop喜欢使用大文件,那么,您想将输入文件拆分为20个不同的文件吗?