Hadoop MapReduce:MapTasks与Mapper

时间:2013-12-05 20:56:34

标签: hadoop mapreduce

我最近阅读了很多文档并询问有关Hadoop的问题,但我只有一件事情我不明白。

在以下两个场景中,究竟发生了什么?

通用配置

  • 文件大小= 1GB
  • Hadoop 1.2.1安装在具有超线程的四核
  • Hadoop以伪分布式模式运行

场景1

  • 分割尺寸= 1GB =>只有一个地图任务
  • mapred.tasktracker.map.task.maximum = 4

我的理解是,即使在这个节点中最多可以同时运行4个映射器,我只有一个MapTask,因此它只使用1个映射器。 (1个过程)

MapTask < Mapper

场景2

这是我最困惑的......   - 分割尺寸= 250MB =&gt;有四个地图任务   - mapred.tasktracker.map.task.maximum = 1

在这种情况下,在我的案例中实际发生的事情是它比场景1运行得快得多,并运行更多进程。我很困惑,因为我知道MapTasks可以同时运行,但是它也不受映射器数量的限制吗?因此,在这种情况下,我认为它看起来像这样,并且具有类似的执行时间结果。

mapper processes map task 1 ----> done
mapper processes map task 2 ----> done
mapper processes map task 3 ----> done
mapper processes map task 4 ----> done

enter image description here

问题

当我有比Mapper更多的MapTasks时,究竟会发生什么?

1 个答案:

答案 0 :(得分:1)

所以,我会回答你的问题,但它没有解释你在性能差异方面的看法。

  

当我有比Mapper更多的MapTasks时,究竟会发生什么?

如果你有比地图插槽更多的地图任务,那么你是正确的:地图插槽将被分配到最大值。完成地图任务后,JobTracker会在打开的地图位置中分配下一个地图任务。

将其拆分为四个可能会更快,即使它由于某些原因而顺序...也许缓冲区溢出行为因数据大小不同而不同。很难说清楚所提供的信息是什么。