Yarn上的MapReduce:控制同时运行的mapper或reducer任务吗?

问题描述:

我的基于mapreduce的hive sql在Yarn上运行,hadoop版本是2.7.2。我想要的,它限制映射器任务或减速器任务同时运行当一些配置单元sql是真的很大。我曾尝试下面的参数,但实际上他们是不是我想要的:Yarn上的MapReduce:控制同时运行的mapper或reducer任务吗?

mapreduce.tasktracker.reduce.tasks.maximum: The maximum number of reduce tasks that will be run simultaneously by a task tracker. 

mapreduce.tasktracker.map.tasks.maximum: The maximum number of map tasks that will be run simultaneously by a task tracker. 

上面的两个参数似乎为我纱线集群不可用,因为纱线没有JobTracker的,这是Hadoop的1概念的概念。 X?我已经检查过我的应用程序,其运行的映射器高于20,但mapreduce.tasktracker.reduce.tasks.maximum值只是默认值2

,然后,我尝试以下两个参数,另外,他们不是我所需要的:

mapreduce.job.maps: The default number of map tasks per job. Ignored when mapreduce.jobtracker.address is "local". 

mapreduce.job.reduces: The default number of reduce tasks per job. Typically set to 99% of the cluster's reduce capacity, so that if a node fails the reduces can still be executed in a single wave. Ignored when mapreduce.jobtracker.address is "local". 

mapreduce.job.maps只是有多少组就会映射任务,可以创建一个提示,并mapreduce.job.maps定义如何会产生许多减速器。

但是我想限制的是,有多少映射器或减速器任务被允许同时为每个应用运行

在我下面的截图中,一个纱线应用程序至少有20多个mapper任务正在运行,这会花费太多的集群资源。我想最多限制为10个。

enter image description here

那么,我该怎么办?

+0

总之,要强制纱线的配额。查看公平调度程序/容量调度程序文档... –

+0

当您回复时,Yarn上的MapReduce作业的并行度仅由纱线控制.Yarn作为资源调度程序不知道其容器中运行的是什么,因此,我能做的,只是控制纱线调度程序aspectr的并行性(实际上我使用的是FairScheduler),没有别的吗? – wuchang

+0

作业的“并行度”是由执行框架(MapReduce,TEZ,Spark)根据输入大小和输入碎片来设置的 - 例如,3个文件共5个HDFS块,没有“合并小文件”选项,表示5个映射器(或5个Spark分区)。 –

这里可能有几个问题。首先,为了控制mappers同时运行的特定作业的缩减器,或者在所有mappers完成之前,您需要调整:mapreduce.job.reduce.slowstart.completedmaps。

此参数默认为.8,即80%。这意味着当80%的制图员完成了减速器的启动。如果你想要减速器等待所有映射器完成,那么你需要将它设置为1.

至于控制同时运行的映射器的数量,那么你需要考虑设置公平的公平调度程序或容量调度程序。

使用其中一个调度程序,您可以为作业运行的队列设置最小和最大资源,以控制同时运行多少个容器(Mappers和Reducers是Yarn中的容器)。

这两个调度程序都有很好的信息。 https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/FairScheduler.html

https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html

+0

当你回复时,Yarn上的MapReduce作业的并行度只受纱线的控制.Yarn作为一个资源调度器,不知道它的容器中正在运行什么,所以我能做的只是控制纱线调度程序aspectr(其实我正在使用FairScheduler),没有别的? – wuchang

+0

但我能做些什么来简单地限制单个应用程序的资源使用情况,而不是一个队列? – wuchang

+0

有两个调度程序。您可以使用容量和/或公平的调度程序。我会建议研究两者,因为它们有很多选项可以调整。链接在我的第一篇文章上面。 – Toni