如何在mapreduce作业

时间:2016-02-23 23:06:03

标签: hadoop mapreduce hdinsight

我正在使用基于Hortonworks的Microsoft HDInsight中的Map-Only MR作业。我的输入数据大约为1GB,块大小为128MB。

当我在没有设置分割大小的情况下运行我的作业时,我的输入数据被分成2个分割,并且地图任务的数量也是2。这需要很长时间,所以我想通过增加地图任务的数量来加快这个过程。

我通过设置mapreduce.input.fileinputformat.split.minsizemapreduce.input.fileinputformat.split.minsize的值来设置拆分次数。

首先,我将分组数设置为8,这项工作所需的时间为35分钟。然后我把它设置为16和64,消耗的时间分别为21分钟和16分钟。

但是当我将分割设置为128时,这项工作所消耗的时间从16分钟增加到18分钟。

我的问题:

1:为什么时间会随着更多的地图任务而增加?我知道实例化一个地图类需要一些时间,但还有其他原因吗?

2:有没有办法确定最合适的分割大小?

谢谢 PS:我的输入文件是没有“.txt”的文本文件。

1 个答案:

答案 0 :(得分:0)

  1. 时间增加的原因是由于您提到的更多地图任务。在映射器数量和输入分割大小之间总是存在权衡。
  2. 在您的情况下,在JVM中实例化Mapper类可能比Mapper中的逻辑花费更多时间。还有一个原因可能是群集中的资源不可用于启动Mapper。其中一些将等到你当前的任务/ Mappers完成,然后它们将被实例化。

    1. 我建议只通过MapInputFormat中的reducers数量为0来通过Mappers发送数据。然后它使用输入分割大小的每个文件写入x个文件。