并行运行多个地图任务

时间:2014-03-29 01:13:31

标签: hadoop mapreduce

我正在使用hadoop 2.0。当我使用 job.setNumMapTasks 更改地图任务的数量时,数字是预期的(在输出文件夹中的序列文件数和容器数),但它们不是并行运行的,但一次只有2个。例如,当我将map任务的数量设置为5时,首先执行其中2个,然后再执行2个,然后执行1.我有一个8核系统,并希望充分利用它。一些在线狩猎(包括StackOverflow)似乎提出了一些建议,我尝试了以下内容:

  1. 调整mapred-site.xml中的参数“mapred.tasktracker.map.tasks.maximum”以设置并行运行的任务数。我把它设置为8。
  2. 缩小参数“mapred.max.split.size”。我的输入序列文件大小为8448509或大约8 MB。因此我将其设置为2097152(2 MB)。
  3. 降低了DFS块大小,“dfs-site.xml中的dfs.block.size。我了解到默认的块大小为64MB。我将其降低到2097152(2 MB)。
  4. 尽管如此,我认为没有任何性能变化。它一次仍然有2个地图任务。我没有格式化我的hdfs并在3之后重新加载序列文件。不确定这是否是原因。

    您可以在https://www.dropbox.com/sh/jnxsm5m2ic1evn4/zPVcdk8GTp访问我的配置文件。我在这里错过了什么吗?

    另外,我有另一个问题。有些帖子似乎提到job.setNumMapTasks只是环境的指标,实际数量由环境决定。但是,我总是发现任务的数量与我指定的一样。这是预期的吗?

    谢谢和问候, 萨穆德拉

1 个答案:

答案 0 :(得分:1)

在经典的mapreduce框架(MR1)中,您可以使用属性mapred.tasktracker.map.tasks.maximum设置地图位置的数量。但在YARN中,情况有所不同。请参阅以下关于YARN中的map / reduce插槽的讨论

https://groups.google.com/a/cloudera.org/forum/#!topic/cdh-user/J564g9A8tPE