我的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)< / p>
我将此变量设置如下:
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任务。 希望有人可以帮助我,谢谢。
=====================
我找到了关于这个问题的答案,在这里与其他可能感兴趣的人分享。
使用公平调度程序,使用配置参数maxMaps在分配文件(fair-scheduler.xml)中设置池的最大并发任务位。 然后,当您提交作业时,只需将作业的队列设置为相应的池。
答案 0 :(得分:5)
您可以将mapred.jobtracker.maxtasks.per.job
的值设置为-1以外的值(默认值)。这限制了作业可以使用的同时映射或减少任务的数量。
此变量描述为:
单个作业的最大任务数。值-1表示没有最大值。
我认为有计划将mapred.max.maps.per.node
和mapred.max.reduces.per.node
添加到工作配置中,但他们从未将其发布。
答案 1 :(得分:3)
如果您使用的是Hadoop 2.7或更高版本,则可以使用mapreduce.job.running.reduce.limit
和{{1}}限制每个作业级别的地图和减少任务。
修复JIRA ticket。
答案 2 :(得分:1)
mapred.tasktracker.map.tasks.maximum是用于限制一次可以运行的地图任务数的属性。在mapred-site.xml中配置它。
中的2.7答案 3 :(得分:0)
触发的映射器数量由输入块大小决定。输入块大小是在从HDFS读取数据时将数据划分并发送到不同映射器的块的大小。因此,为了控制映射器的数量,我们必须控制块大小。
可以通过设置参数mapred.min.split.size
和mapred.max.split.size
来控制,同时在MapReduce中配置作业。该值将以字节为单位进行设置。因此,如果我们有一个20 GB的文件,并且我们想要触发40个映射器,那么我们需要将它们设置为20480/40 = 512 MB。所以代码就是,
conf.set("mapred.min.split.size", "536870912");
conf.set("mapred.max.split.size", "536870912");
其中conf
是org.apache.hadoop.conf.Configuration
类的对象。
答案 4 :(得分:0)
了解Hadoop中的调度作业(例如&#34;公平调度程序&#34;)。您可以使用多个配置创建自定义队列,然后将作业分配给该队列。如果将自定义队列最大映射任务限制为10,那么最多分配给队列的每个作业将具有10个并发映射任务。