CDH/YRAN_集羣調優

  參考文章 : 

1.yarn資源memory與core計算配置

https://www.cnblogs.com/xjh713/p/9855238.html

 

2.cdh之調整YARN(調優yarn 生產必做優化項)004

https://blog.csdn.net/weixin_33788244/article/details/91669894

 

內存相關參數

 

  我們在運行使用CDH平臺的時候,需要對YARN 的資源配置進行一定的調整。下面我們看一下相關的參數 ,主要的涉及到的參數爲 內存 與 cpu 相關的參數 。

 

計算每臺機器擁有的container 數量 :

containers = min (2*CORES, 1.8*DISKS, (Total available RAM) / MIN_CONTAINER_SIZE)

 說明:

CORES爲機器CPU核數

DISKS爲機器上掛載的磁盤個數

Total available RAM爲機器總內存

MIN_CONTAINER_SIZE是指container最小的容量大小,這需要根據具體情況去設置,可以參考下面的表格:

 

每個container的平均使用內存大小計算方式爲:

RAM-per-container = max(MIN_CONTAINER_SIZE, (Total Available RAM) / containers)) 

 

相關參數配置說明

 

  • yarn.nodemanager.resource.memory-mb

表示該節點上YARN可使用的物理內存總量,默認是8192(MB),注意,如果你的節點內存資源不夠8GB,則需要調減小這個值,而YARN不會智能的探測節點的物理內存總量。

 

  • yarn.nodemanager.vmem-pmem-ratio

    任務每使用1MB物理內存,最多可使用虛擬內存量,默認是2.1。

 

  • yarn.nodemanager.pmem-check-enabled

    是否啓動一個線程檢查每個任務正使用的物理內存量,如果任務超出分配值,則直接將其殺掉,默認是true。

 

  • yarn.nodemanager.vmem-check-enabled

   是否啓動一個線程檢查每個任務正使用的虛擬內存量,如果任務超出分配值,則直接將其殺掉,默認是true。

 

  •   yarn.scheduler.minimum-allocation-mb

   單個container可申請的最少物理內存量,默認是1024(MB),如果一個任務申請的物理內存量少於該值,則該對應的值改爲這個數。

 

  • yarn.scheduler.maximum-allocation-mb

    單個container可申請的最多物理內存量,默認是8192(MB)。

 

  • yarn.scheduler.increment-allocation-mb

   容器內存增量, 默認是512 (MB)

 

  AppMaster 的對應配置項見最後面!!! 

 

    默認情況下,YARN採用了線程監控的方法判斷任務是否超量使用內存,一旦發現超量,則直接將其殺死。由於Cgroups對內存的控制缺乏靈活性(即任務任何時刻不能超過內存上限,如果超過,則直接將其殺死或者報OOM),而Java進程在創建瞬間內存將翻倍,之後驟降到正常值,這種情況下,採用線程監控的方式更加靈活(當發現進程樹內存瞬間翻倍超過設定值時,可認爲是正常現象,不會將任務殺死),因此YARN未提供Cgroups內存隔離機制。

 

 

 

 

 

CPU 相關參數

 

   在yarn中使用的是虛擬CPU,這裏的虛擬CPU是YARN自己引入的概念,初衷是,考慮到不同節點的CPU性能可能不同,每個CPU具有的計算能力也是不一樣的,比如某個物理CPU的計算能力可能是另外一個物理CPU的2倍,這時候,你可以通過爲第一個物理CPU多配置幾個虛擬CPU彌補這種差異。用戶提交作業時,可以指定每個任務需要的虛擬CPU個數。在YARN中,CPU相關配置參數如下:

  • yarn.nodemanager.resource.cpu-vcores

    表示該節點上YARN可使用的虛擬CPU個數,默認是8,注意,目前推薦將該值設值爲與物理CPU核數數目相同。
    如果你的節點CPU核數不夠8個,則需要調減小這個值,而YARN不會智能的探測節點的物理CPU總數。

 

  • yarn.scheduler.minimum-allocation-vcores

    單個任務可申請的最小虛擬CPU個數,默認是1,如果一個任務申請的CPU個數少於該數,則該對應的值改爲這個數。

 

  • yarn.scheduler.maximum-allocation-vcores

    單個任務可申請的最多虛擬CPU個數,默認是32。

 

 默認情況下,YARN是不會對CPU資源進行調度的,你需要配置相應的資源調度器讓你支持,具體參看以下鏈接:

1. Hadoop YARN配置參數剖析(4)—Fair Scheduler相關參數

2. Hadoop YARN配置參數剖析(5)—Capacity Scheduler相關參數

 

   默認情況下,NodeManager不會對CPU資源進行任何隔離,你可以通過啓用Cgroups讓你支持CPU隔離。

由於CPU資源的獨特性,目前這種CPU分配方式仍然是粗粒度的。舉個例子,很多任務可能是IO密集型的,消耗的CPU資源非常少,如果此時你爲它分配一個CPU,則是一種嚴重浪費,你完全可以讓他與其他幾個任務公用一個CPU,也就是說,我們需要支持更粒度的CPU表達方式。

  借鑑亞馬遜EC2中CPU資源的劃分方式,即提出了CPU最小單位爲EC2 Compute Unit(ECU),一個ECU代表相當於1.0-1.2 GHz 2007 Opteron or 2007 Xeon處理器的處理能力。YARN提出了CPU最小單位YARN Compute Unit(YCU),目前這個數是一個整數,默認是720,由參數yarn.nodemanager.resource.cpu-ycus-per-core設置,表示一個CPU core具備的計算能力(該feature在2.2.0版本中並不存在,可能增加到2.3.0版本中),這樣,用戶提交作業時,直接指定需要的YCU即可,比如指定值爲360,表示用1/2個CPU core,實際表現爲,只使用一個CPU core的1/2計算時間。注意,在操作系統層,CPU資源是按照時間片分配的,你可以說,一個進程使用1/3的CPU時間片,或者1/5的時間片。對於CPU資源劃分和調度的探討,可參考以下幾個鏈接:

https://issues.apache.org/jira/browse/YARN-1089

https://issues.apache.org/jira/browse/YARN-1024

Hadoop 新特性、改進、優化和Bug分析系列5:YARN-3

 

  AppMaster 的對應配置項見最後面!!! 

 

 

 

 

AppMaster 相關的參數

 

  • yarn.app.mapreduce.am.resource.cpu-vcores

ApplicationMaster 虛擬 CPU 內核, 默認值 1 //推薦值

 

  • yarn.app.mapreduce.am.resource.mb

ApplicationMaster 內存,默認值 1024M

 

  • yarn.app.mapreduce.am.command-opts

ApplicationMaster Java 選項庫, yarn.app.mapreduce.am.command-opts = -Djava.net.preferIPv4Stack=true -Xmx768m

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章