如何在新的Hadoop api中设置映射器的数量?

时间:2013-12-28 19:17:28

标签: hadoop mapreduce

我已经从旧版本(mapred)切换到新的Hadoop api(mapreduce)。我无法在新api中设置映射器的数量。我可以使用job.setNumReduceTasks()来设置reducer的数量,但是没有任何方法可以使用mappers的数量。我也尝试了conf.setInt("mapred.map.tasks", numMapper)conf.setInt("mapreduce.map.tasks", numMapper),但它也没有用。

3 个答案:

答案 0 :(得分:2)

映射器任务的数量由您拥有的输入拆分决定。显然,每个部分将由1个映射器处理。基本上,您的数据决定了地图制作者的数量!

但是,您可以使用mapreduce.jobtracker.maxtasks.perjob来限制并行性(不幸的是,这会影响映射器和缩减器!)。但如果将其设置为10,则最多10个映射器应并行运行。

更细粒度的控制会很好,但是是一张开放的票:

  

MAPREDUCE-5583: Ability to limit running map and reduce tasks

答案 1 :(得分:1)

从Hadoop 2.7开始,您可以使用sizeofmapreduce.job.running.map.limit在每个作业级别控制这些内容。

由此JIRA ticket修正。

答案 2 :(得分:0)

在YARN中,可以将mapreduce.input.fileinputformat.split.minsize(以兆字节为单位)设置为远高于正在读取的文件的块大小。这将通过每个映射器强制执行更多数据,从而减少所需的映射器数量。但是,某些文件格式可能有自己的最小分割大小,优先于此设置。