我的基于mapreduce的hive sql在Yarn上运行,hadoop版本是2.7.2。我想要的是,它限制映射器任务或减少任务同时运行当一些hive sql真的很大时。我尝试过以下参数,但事实上它们并不是我想要的:
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
定义将生成多少个reducer。
但我想限制的是,允许多少个mapper或reducer任务同时为每个应用程序运行?
在我的下面的屏幕截图中,一个纱线应用程序至少运行了20多个映射器任务,这需要花费太多的群集资源。我想将它限制为最多10个。
那么,我该怎么办?
答案 0 :(得分:1)
这里可能有几个问题。首先要控制在映射器同时运行的特定作业的缩减器,或者在所有映射器完成之前,你需要调整:mapreduce.job.reduce.slowstart.completedmaps。
此参数默认为.8,即80%。这意味着当80%的映射器完成减速器启动时。如果您希望reducers等到所有映射器都完成,那么您需要将其设置为1.
至于控制一次运行的映射器的数量,那么您需要查看设置公平调度程序或容量调度程序。
使用其中一个调度程序,您可以为作业运行的队列设置最小和最大资源,这将控制一次运行多少个容器(Mapper和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