yarn資源調優參數&yarn的調度器&yarn的常用命令

yarn資源調優參數

概念介紹

  • container
    是一個虛擬化的容器,包括memory和vcore兩個維度,作用是運行appmaster和task任務
  • 物理核pcore
    服務器上實際的物理CPU的核數
  • 虛擬核vcore
    yarn引入的一個概念,設計的初衷是考慮到每臺服務器的性能不一樣,比如某一個物理CPU是另一個物理CPU的兩倍,通過設置pcore和vcore來彌補這種差距
    比如第一臺機器CPU性能強悍,設置pcore:vcore=1:2
    第二臺機器CPU性能比較差,設置pcore:vcore=1:1

生產上如何調優

內存參數

在yarn-site.xml中進行配置

key value desc
yarn.nodemanager.resource.memory-mb -1 可以分配給容器的物理內存總量(以MB爲單位)
yarn.scheduler.minimum-allocation-mb 1024 單個container向RM能申請到的最小內存
yarn.scheduler.maximum-allocation-mb 8192 單個container向RM能申請到的最大內存

cpu參數

在yarn-site.xml中進行配置

key value desc
yarn.nodemanager.resource.pcores-vcores-multiplier 1 將pcore轉化爲vcore的乘數,若爲2,表示pcore*2=vcore。推薦pcore:vcore=1:2
yarn.nodemanager.resource.cpu-vcores -1 所有conatiner能使用的物理內存總和
yarn.scheduler.minimum-allocation-vcores 1 單個container向RM能申請到的最小vcore數量
yarn.scheduler.maximum-allocation-vcores 4 單個container向RM能申請到的最大vcore數量。cloudera公司推薦一個container的vcores最好不要超過5,一般我們設置爲4

設置DN和NM的內存數

DN和NM在生產上的參數設置爲2G和4G即可

組件 文件 參數 大小 desc
DataNode hadoop-env.sh HADOOP_HEAPSIZE= 1000 單位M,生產上一般分配2048即可
NodeManager yarn-env.sh YARN_HEAPSIZE= 1000 單位M,生產上一般分配4096即可

樣例

假如服務器有128G內存,16物理cpu,需要裝DN和NM,具體如何設置參數

1、裝centos需要消耗1G內存
2、系統預留15%-20%,包括裝centos的空間,預留的原因是防止全部被使用以及oom事件或者給未來裝其他組件預留空間

128*20=25.6G==26G

還剩下 128-26=102G內存
3、假設只有dn和nm組件,裝dn和nm分別需要2G和4G內存
還剩下102-2-4=96G內存
container內存的分配

yarn.nodemanager.resource.memory-mb     96G
yarn.scheduler.minimum-allocation-mb	1G   極限情況下,只有96個container 內存1G	
yarn.scheduler.maximum-allocation-mb	96G  極限情況下,只有1個container 內存96G
container的內存會自動增加,默認1g遞增
container:1-96個

4、container物理核分配 (物理核:虛擬核 =1:2 ==>16:32)

yarn.nodemanager.resource.pcores-vcores-multiplier 2
yarn.nodemanager.resource.cpu-vcores            32
yarn.scheduler.minimum-allocation-vcores	1  極限情況下,只有32個container	
yarn.scheduler.maximum-allocation-vcores	32 極限情況下,只有1個container
container:1-32個

4、需要注意的是pcore:vcore=1:2 所以vcore=16*2=32核;cloudera公司推薦,一個container的vcore最好不要超過5,那麼我們設置4

yarn.scheduler.maximum-allocation-vcores 4   極限情況下,只有8個container

5、綜合memory+vcore,確定 vcore=4 container 8個
內存的設置爲

yarn.scheduler.maximum-allocation-mb	12G 極限container 8個

6、最終的設置爲

yarn.nodemanager.resource.cpu-vcores     -->  32  # 16*2=32
yarn.scheduler.minimum-allocation-vcores -->  1   # 最多有32個container
yarn.scheduler.maximum-allocation-vcores -->  4   # 最少有8個container 
yarn.nodemanager.resource.memory-mb      -->  96G # container能使用的最大內存
yarn.scheduler.minimum-allocation-mb     -->  1G  # 
yarn.scheduler.maximum-allocation-mb     -->  12G # 極限8個(96/8)

當然當spark計算時內存不夠大,這個參數肯定要調大,
那麼這種理想化的設置個數必然要打破,以memory爲主

假如服務器有256G內存,56物理cpu,需要裝DN、NM和hbase regionserver,具體如何設置參數

1、需要減去內存開銷和其他組件的開銷

預留 15%-20%(包括裝centos消耗的內存)
dn 2G
nm 4G
hbase regionserver 30G

還剩餘256-2560.2-2-4-30 = 168G
2、pcore:vcore=1:2 ,故vcore數量爲56
2=112;單個container佔用4個vcore,確定 memory和vcore,所以最終爲

yarn.nodemanager.resource.cpu-vcores     -->  112  # 56*2=112
yarn.scheduler.minimum-allocation-vcores -->  1    # 最多有112個container
yarn.scheduler.maximum-allocation-vcores -->  4    # 最少有28個container 
yarn.nodemanager.resource.memory-mb      -->  168G # RM能使用的最大內存
yarn.scheduler.minimum-allocation-mb     -->  1G   # 
yarn.scheduler.maximum-allocation-mb     -->  6G   # 極限28個(168/28)

yarn的調度器整理三種

在Yarn中有三種調度器可以選擇:FIFO Scheduler ,Capacity Scheduler,FairScheduler。

FIFO 先進先出調度器

先進先出(First In First Out)調度器。FIFO 調度器是 Hadoop 使用最早的一種調度策略,可以簡單的將其理解爲一個隊列,這意味着在集羣中同時只能有一個作業運行。所有的應用程序按照提交順序來執行,在上一個 Job 執行完成之後,下一個 Job 按照隊列中的順序執行。FIFO調度器以獨佔集羣全部資源的方式來運行作業,這樣的好處是 Job 可以充分利用集羣的全部資源,但是對於運行時間短,優先級高或者交互式查詢類的MR Job 需要等待它之前的 Job 完成才能被執行,這也就導致瞭如果前面有一個比較大的 Job 在運行,那麼後面的 Job 將會被阻塞。因此,雖然 FIFO 調度器實現簡單,但是並不能滿足很多實際場景的要求。這也就促使 Capacity 調度器和 Fair 調度器的誕生。
在這裏插入圖片描述

Capacity 計算調度器

而對於Capacity調度器,有一個專門的隊列用來運行小任務,但是爲小任務專門設置一個隊列會預先佔用一定的集羣資源,這就導致大任務的執行時間會落後於使用FIFO調度器時的時間。
在這裏插入圖片描述

Fair 公平調度器

在Fair調度器中,我們不需要預先佔用一定的系統資源,Fair調度器會爲所有運行的job動態的調整系統資源。如上圖所示,當第一個大job提交時,只有這一個job在運行,此時它獲得了所有集羣資源;當第二個小任務提交後,Fair調度器會分配一半資源給這個小任務,讓這兩個任務公平的共享集羣資源。

需要注意的是,在上圖Fair調度器中,從第二個任務提交到獲得資源會有一定的延遲,因爲它需要等待第一個任務釋放佔用的Container。小任務執行完成之後也會釋放自己佔用的資源,大任務又獲得了全部的系統資源。最終的效果就是Fair調度器即得到了高的資源利用率又能保證小任務及時完成。
在這裏插入圖片描述

apache和cdh的默認調度器

Apache Hadoop的默認調度器是什麼

yarn-site.xml進行設置

key value desc
yarn.resourcemanager.scheduler.class org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler 默認是計算調度器

cdh的默認調度器是什麼

默認調度器是:公平調度器
可以登錄yarn的頁面查看
在這裏插入圖片描述

yarn的常用命令

運行jar包

yarn jar
hadoop jar

殺死yarn的進程

使用場景,進程夯住了或者提交錯任務了
yarn application -kill < application ID>
在這裏插入圖片描述

下載log日誌

[hadoop@JD ~]$ yarn logs
Retrieve logs for completed YARN applications.
usage: yarn logs -applicationId [OPTIONS]

general options are:
-appOwner AppOwner (assumed to be current user if
not specified)
-containerId ContainerId (must be specified if node
address is specified)
-nodeAddress NodeAddress in the format nodename:port
(must be specified if container id is
specified)

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