我的hadoop版本是1.0.2。现在我希望最多同时运行 10 个地图任务。我发现了与这个问题相关的 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 多张地图在运行。
翻阅了hadoop文档后,找不到另一个限制并发运行map任务的。希望有人可以帮助我,谢谢。
======================
我已经找到了关于这个问题的答案,在这里分享给其他可能感兴趣的人。
在分配文件 (fair-scheduler.xml) 中使用公平调度器,并使用配置参数 maxMaps 来设置池的最大并发任务槽。然后,当您提交作业时,只需将作业的队列设置到相应的池中即可。