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



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

映射器任务的数量由您拥有的输入拆分决定。显然,每个部分将由 1 个映射器处理。因此,从本质上讲,您的数据决定了映射器的数量!

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

更细粒度的控件会很好,但是一个开放票证:

MAPREDUCE-5583:能够限制运行映射并减少任务

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

由此JIRA票证修复。

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

相关内容

  • 没有找到相关文章

最新更新