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个。
那么,我该怎么办?
这里可能有几个问题。首先,为了控制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
总之,要强制纱线的配额。查看公平调度程序/容量调度程序文档... –
当您回复时,Yarn上的MapReduce作业的并行度仅由纱线控制.Yarn作为资源调度程序不知道其容器中运行的是什么,因此,我能做的,只是控制纱线调度程序aspectr的并行性(实际上我使用的是FairScheduler),没有别的吗? – wuchang
作业的“并行度”是由执行框架(MapReduce,TEZ,Spark)根据输入大小和输入碎片来设置的 - 例如,3个文件共5个HDFS块,没有“合并小文件”选项,表示5个映射器(或5个Spark分区)。 –