如何在新的hadoopapi中设置Map器的数量?

c9qzyr3d  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(408)

我已经从旧的hadoopapi(mapred)切换到了新的hadoopapi(mapreduce)。我无法在新api中设置Map程序的数量。我可以用 job.setNumReduceTasks() 设置还原器的数量,但没有任何Map器数量的方法。我也试过了 conf.setInt("mapred.map.tasks", numMapper) 以及 conf.setInt("mapreduce.map.tasks", numMapper) 但它也不起作用。

lhcgjxsq

lhcgjxsq1#

从hadoop2.7开始,您可以使用 mapreduce.job.running.map.limit 以及 mapreduce.job.running.reduce.limit 在每个工作级别控制这些。
由这张jira罚单修复。

dnph8jn4

dnph8jn42#

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

wj8zmpe1

wj8zmpe13#

Map器任务的数量由您的输入分割决定。显然,每个部分将由一个Map器处理。所以本质上,你的数据决定了你的Map绘制者的数量!
但是,您可以使用 mapreduce.jobtracker.maxtasks.perjob 限制并行性(不幸的是,这会影响Map器和还原器!)。但是如果你把这个设置为10,最多10个Map器应该并行运行。
一个更细粒度的控件会更好,但它是一个开放的票证:
mapreduce-5583:限制运行map和减少任务的能力

相关问题