9

我的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 来设置池的最大并发任务槽。然后,当您提交作业时,只需将作业的队列设置到相应的池中即可。

4

5 回答 5

5

您可以将值设置为mapred.jobtracker.maxtasks.per.job-1(默认值)以外的值。这限制了一个作业可以同时使用的 map 或 reduce 任务的数量。

这个变量被描述为:

单个作业的最大任务数。值 -1 表示没有最大值。

我认为有计划添加mapred.max.maps.per.nodemapred.max.reduces.per.node工作配置,但他们从未发布。

于 2013-04-02T16:18:01.880 回答
4

如果您使用的是 Hadoop 2.7 或更新版本,您可以使用mapreduce.job.running.map.limitandmapreduce.job.running.reduce.limit来限制每个作业级别的 map 和 reduce 任务。

修复JIRA 票证

于 2015-08-05T15:33:29.343 回答
1

mapred.tasktracker.map.tasks.maximum 是限制一次可以运行的地图任务数量的属性。在您的 mapred-site.xml 中配置它。

请参阅http://wiki.apache.org/hadoop/FAQ中的 2.7

于 2013-01-17T14:42:49.390 回答
0

触发的映射器数量由输入块大小决定。输入块大小是数据在从 HDFS 读取时被划分并发送到不同映射器的块的大小。因此,为了控制映射器的数量,我们必须控制块大小。

在 MapReduce 中配置作业时,可以通过设置参数mapred.min.split.size和来控制它。mapred.max.split.size该值以字节为单位设置。因此,如果我们有一个 20 GB 的文件,并且我们想要触发 40 个映射器,那么我们需要将其设置为 20480 / 40 = 512 MB。因此,代码将是,

conf.set("mapred.min.split.size", "536870912");
conf.set("mapred.max.split.size", "536870912");

whereconforg.apache.hadoop.conf.Configuration类的对象。

于 2013-01-22T09:29:04.773 回答
0

阅读 Hadoop 中的调度作业(例如“fair scheduler”)。您可以创建具有多种配置的自定义队列,然后将您的工作分配给该队列。如果您将自定义队列最大映射任务限制为 10,则分配给队列的每个作业最多将有 10 个并发映射任务。

于 2016-05-04T10:14:05.617 回答