如何限制并发运行的map任务?

yv5phkfx  于 2021-06-04  发布在  Hadoop
关注(0)|答案(5)|浏览(525)

我的hadoop版本是1.0.2。现在我希望最多10个Map任务同时运行。我发现了与这个问题相关的两个变量。
a) mapred.job.map.capacityMap
但是在我的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)中,使用fair scheduler和配置参数maxmaps设置池的最大并发任务槽。然后在提交作业时,只需将作业的队列设置为相应的池。

p1tboqfb

p1tboqfb1#

触发的Map器数量由输入块大小决定。输入块大小是从hdfs读取数据时,数据被分割并发送到不同Map器的块的大小。所以为了控制Map器的数量,我们必须控制块的大小。
可以通过设置参数来控制, mapred.min.split.size 以及 mapred.max.split.size ,在mapreduce中配置作业时。该值以字节为单位设置。因此,如果我们有一个20gb的文件,并且我们想要启动40个Map器,那么我们需要将其设置为20480/40=512MB。所以代码是,

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

哪里 conforg.apache.hadoop.conf.Configuration 班级。

bpsygsoo

bpsygsoo2#

如果您使用的是hadoop2.7或更新版本,那么可以使用 mapreduce.job.running.map.limit 以及 mapreduce.job.running.reduce.limit 在每个工作级别限制Map和减少任务。
修好吉拉的罚单。

pbpqsu0x

pbpqsu0x3#

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

56lgkhnf

56lgkhnf4#

mapred.tasktracker.map.tasks.maximum是限制一次可以运行的Map任务数的属性。在mapred-site.xml中进行配置。
参见中的2.7http://wiki.apache.org/hadoop/faq

yyhrrdl8

yyhrrdl85#

您可以设置 mapred.jobtracker.maxtasks.per.job 不是-1(默认值)。这限制了一个作业可以同时Map或减少任务的数量。
此变量描述为:
单个作业的最大任务数。值-1表示没有最大值。
我想有人计划增加 mapred.max.maps.per.node 以及 mapred.max.reduces.per.node 但他们从未发布过。

相关问题