map - 如何限制并发运行的 map task ?

标签 map hadoop mapreduce task jobs

我的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.nodemapred.max.reduces.per.node 添加到作业配置中,但他们从来没有使其发布。

关于map - 如何限制并发运行的 map task ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14380841/

相关文章:

hadoop - 为整个 Mapper/Reducer 定义一个可写的

hadoop - Hadoop排序图并减少键值

hadoop - 最佳精度等级

file - Map在Hadoop下运行时应该把临时文件放在哪里

c++ - 将 std::strings 插入到 std::map

sql - 改变 hive 中的现有 map

java - 在hadoop编程中,分区,比较在哪里?

java - Java中的多值哈希表

c++ - 可以安全地从基于以下范围的 map 中删除吗?

hadoop - 我想在 pig : dash, 逗号、散列、空格和冒号中使用以下分隔符来标记字符串