我已经从旧的hadoopapi(mapred)切换到了新的hadoopapi(mapreduce)。我无法在新api中设置Map程序的数量。我可以用 job.setNumReduceTasks() 设置还原器的数量,但没有任何Map器数量的方法。我也试过了 conf.setInt("mapred.map.tasks", numMapper) 以及 conf.setInt("mapreduce.map.tasks", numMapper) 但它也不起作用。
job.setNumReduceTasks()
conf.setInt("mapred.map.tasks", numMapper)
conf.setInt("mapreduce.map.tasks", numMapper)
lhcgjxsq1#
从hadoop2.7开始,您可以使用 mapreduce.job.running.map.limit 以及 mapreduce.job.running.reduce.limit 在每个工作级别控制这些。由这张jira罚单修复。
mapreduce.job.running.map.limit
mapreduce.job.running.reduce.limit
dnph8jn42#
在yarn中,可以将mapreduce.input.fileinputformat.split.minsize(以兆字节为单位)设置得比正在读取的文件的块大小高得多。这将迫使更多的数据通过每个Map器,从而减少所需的Map器的数量。但是,某些文件格式可能有自己的最小拆分大小,它优先于此设置。
wj8zmpe13#
Map器任务的数量由您的输入分割决定。显然,每个部分将由一个Map器处理。所以本质上,你的数据决定了你的Map绘制者的数量!但是,您可以使用 mapreduce.jobtracker.maxtasks.perjob 限制并行性(不幸的是,这会影响Map器和还原器!)。但是如果你把这个设置为10,最多10个Map器应该并行运行。一个更细粒度的控件会更好,但它是一个开放的票证:mapreduce-5583:限制运行map和减少任务的能力
mapreduce.jobtracker.maxtasks.perjob
3条答案
按热度按时间lhcgjxsq1#
从hadoop2.7开始,您可以使用
mapreduce.job.running.map.limit
以及mapreduce.job.running.reduce.limit
在每个工作级别控制这些。由这张jira罚单修复。
dnph8jn42#
在yarn中,可以将mapreduce.input.fileinputformat.split.minsize(以兆字节为单位)设置得比正在读取的文件的块大小高得多。这将迫使更多的数据通过每个Map器,从而减少所需的Map器的数量。但是,某些文件格式可能有自己的最小拆分大小,它优先于此设置。
wj8zmpe13#
Map器任务的数量由您的输入分割决定。显然,每个部分将由一个Map器处理。所以本质上,你的数据决定了你的Map绘制者的数量!
但是,您可以使用
mapreduce.jobtracker.maxtasks.perjob
限制并行性(不幸的是,这会影响Map器和还原器!)。但是如果你把这个设置为10,最多10个Map器应该并行运行。一个更细粒度的控件会更好,但它是一个开放的票证:
mapreduce-5583:限制运行map和减少任务的能力