我已经从旧版本(mapred)切换到新的Hadoop api(mapreduce)。我无法在新api中设置映射器的数量。我可以使用job.setNumReduceTasks()
来设置reducer的数量,但是没有任何方法可以使用mappers的数量。我也尝试了conf.setInt("mapred.map.tasks", numMapper)
和conf.setInt("mapreduce.map.tasks", numMapper)
,但它也没有用。
答案 0 :(得分:2)
映射器任务的数量由您拥有的输入拆分决定。显然,每个部分将由1个映射器处理。基本上,您的数据决定了地图制作者的数量!
但是,您可以使用mapreduce.jobtracker.maxtasks.perjob
来限制并行性(不幸的是,这会影响映射器和缩减器!)。但如果将其设置为10,则最多10个映射器应并行运行。
更细粒度的控制会很好,但是是一张开放的票:
MAPREDUCE-5583: Ability to limit running map and reduce tasks
答案 1 :(得分:1)
从Hadoop 2.7开始,您可以使用sizeof
和mapreduce.job.running.map.limit
在每个作业级别控制这些内容。
由此JIRA ticket修正。
答案 2 :(得分:0)
在YARN中,可以将mapreduce.input.fileinputformat.split.minsize(以兆字节为单位)设置为远高于正在读取的文件的块大小。这将通过每个映射器强制执行更多数据,从而减少所需的映射器数量。但是,某些文件格式可能有自己的最小分割大小,优先于此设置。