在TARN中,資源管理由RescoueceManager和NodeManager共同完成,其中,Resourcemanager中的調度器負責資源分配,而NodeManager則負責資源的供給和隔離。node
ResourceManager將某個Nodemanager上資源分配給任務(這就是所謂的資源調度)後,NodeManager需按照要求爲任務提供相應的資源,甚至保證這些資源應具備獨佔性,爲任務運行提供基礎保證,這就是所謂的資源隔離。性能
基於以上考慮,YARN容許用戶配置每、個節點上可用的物理內存資源,注意,這裏是「可用的」,由於一個節點上的內存會被若干個服務共享,好比一部分給YARN,一部分給HDFS,一部分給HBase等,YARN配置的只是本身可使用的,配置參數以下:spa
(1)yarn.nodemanager.resource.memory-mb 線程
表示該節點上YARN可以使用的物理內存總量,默認是8192MB,注意,若是你的節點內存資源不夠8G,則須要調減少這個值,而YARN不會智能的探測節點的物理內存總量。blog
上邊這兩個參數是有關聯的,若是yarn.nodemanager.resource.detect-hardware-capabilities 爲true而且yarn.nodemanager.resource.memory-mb 爲-1,那麼內存
yarn.nodemanager.resource.memory-mb是自動計算,若是不是則yarn.nodemanager.resource.memory-mb=8G(默認)資源
(2)yarn.scheduler.minimum-allocation-mb it
單個任務可申請的最少內存,默認時1024M,若是一個任務申請的物理內存量少於該值,則該對應的值減小位這個數io
(3)yarn.scheduler.maximum-allocation-mbclass
單個任務可申請的最大內存,默認時8192M
(4)yarn.nodemanager.pmem-check-enabled true
是否啓動一個線程檢查每一個任務正在使用的物理內存量,若是任務超出分配值,直接將他殺掉,默認是True
(5)yarn.nodemanager.vmem-check-enabled true
是否啓動一個線程檢查每一個任務正在使用的虛擬內存量,若是任務超出分配值,直接將他殺掉,默認是True
(6)yarn.nodemanager.vmem-pmem-ratio 2.1
任務每使用1M的物理內存,最多可以使用的虛擬內存量
目前的CPU被劃分紅虛擬CPU(CPU virtual Core),這裏的虛擬CPU是YARN本身引入的概念,初衷是,考慮到不一樣節點的CPU性能可能不一樣,每一個CPU具備的計算能力也是不同的,好比某個物理CPU的計算能力多是另一個物理CPU的2倍,這時候,你能夠經過爲第一個物理CPU多配置幾個虛擬CPU彌補這種差別。用戶提交做業的時候,能夠指定每一個任務須要的虛擬CPU個數。在YARN中,CPU相關配置參數以下:
(7) yarn.nodemanager.resource.cpu-vcores 12
表示該節點上YARN可以使用的虛擬CPU個數,默認是8,目前推薦將該值設置位與物理CPU核數數目相同。若是物理CPU核數不夠8,則須要調小這個值,而YARN不 會智能的探測物理CPU總數。
(8) yarn.scheduler.minimum-allocation-vcores 1
單個任務可申請的最小CPU個數,默認是1,若是一個任務申請的CPU個數小於該數,則將該數改成這個數。
(9) yarn.scheduler.maximum-allocation-vcores 4
單個任務可申請的最大CPU個數,默認是4
container: 容器個數的判別標準有兩個維度
一個是物理內存,一個是CPU
memory 16c~4c
vcores 12c~3c
總結: yarn的在調優時候要綜合考慮CPU和內存的分配,儘可能保證不要空出多餘的資源,假如container總內存30,container最小2G,總vcore8 container 最小1c
那麼咱們內存能夠啓動最多15個container,cpu最多啓動8個container,最終能夠啓動8個container,會有至關多的內存沒有用到。因此生產上的調優配置須要綜合考量內存和 CPU的配比。