我的hadoop版本是1.0.2。现在我最多同时运行 10 个 map task 。我发现了 2 个与这个问题相关的变量。
a) mapred.job.map.capacity
但在我的 hadoop 版本中,这个参数似乎被放弃了。
b) mapred.jobtracker.taskScheduler.maxRunningTasksPerJob (http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.collector/1.0.2/mapred-default.xml)
我像下面这样设置这个变量:
Configuration conf = new Configuration();
conf.set("date", date);
conf.set("mapred.job.queue.name", "hadoop");
conf.set("mapred.jobtracker.taskScheduler.maxRunningTasksPerJob", "10");
DistributedCache.createSymlink(conf);
Job job = new Job(conf, "ConstructApkDownload_" + date);
...
问题是它不起作用。作业开始时仍有 50 多个 map 在运行。
翻了hadoop文档,没找到另外一个限制并发运行map任务的。 希望有人能帮助我,谢谢。
=====================
我已经找到了这个问题的答案,在这里分享给可能感兴趣的其他人。
使用公平调度程序,在分配文件 (fair-scheduler.xml) 中使用配置参数 maxMaps 设置池的最大并发任务槽。 然后当您提交作业时,只需将作业的队列设置到相应的池即可。
最佳答案
您可以将 mapred.jobtracker.maxtasks.per.job
的值设置为 -1(默认值)以外的值。这限制了一个作业可以同时使用的 map 或 reduce 任务的数量。
这个变量被描述为:
The maximum number of tasks for a single job. A value of -1 indicates that there is no maximum.
我认为有计划将 mapred.max.maps.per.node
和 mapred.max.reduces.per.node
添加到作业配置中,但他们从来没有使其发布。
关于map - 如何限制并发运行的 map task ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14380841/