2017-08-14 99 views
0

我的基於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分區)。 –

回答

1

這裏可能有幾個問題。首先,爲了控制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

相關問題