如何限制并发运行的映射任务



我的hadoop版本是1.0.2。现在我希望最多有10个地图任务同时运行。我发现了两个与这个问题相关的变量。

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

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

这个变量描述为:

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

我认为有计划将mapred.max.maps.per.nodemapred.max.reduces.per.node添加到作业配置中,但它们从未发布。

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

mapred.tasktracker.map.tasks。Maximum是用于限制一次可以运行的映射任务数量的属性。在mapred-site.xml中配置它。

参见http://wiki.apache.org/hadoop/FAQ

中的2.7

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

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

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

其中conforg.apache.hadoop.conf.Configuration类的对象

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

相关内容

  • 没有找到相关文章

最新更新