Hadoop YARN配置參數(shù)剖析(4)—Fair Scheduler相關(guān)參數(shù)
首先在yarn-site.xml中,將配置參數(shù)yarn.resourcemanager.scheduler.class設(shè)置為org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler。
Fair Scheduler的配置選項(xiàng)包括兩部分,其中一部分在yarn-site.xml中,主要用于配置調(diào)度器級(jí)別的參數(shù),另外一部分在一個(gè)自定義配置文件(默認(rèn)是fair-scheduler.xml)中,主要用于配置各個(gè)隊(duì)列的資源量、權(quán)重等信息。
想要了解Fair Scheduler是什么,可閱讀我的這篇文章“Hadoop公平調(diào)度器分析”。
1. 配置文件yarn-site.xml
(1) yarn.scheduler.fair.allocation.file :自定義XML配置文件所在位置,該文件主要用于描述各個(gè)隊(duì)列的屬性,比如資源量、權(quán)重等,具體配置格式將在后面介紹。
(2) yarn.scheduler.fair.user-as-default-queue:當(dāng)應(yīng)用程序未指定隊(duì)列名時(shí),是否指定用戶名作為應(yīng)用程序所在的隊(duì)列名。如果設(shè)置為false或者未設(shè)置,所有未知隊(duì)列的應(yīng)用程序?qū)⒈惶峤坏絛efault隊(duì)列中,默認(rèn)值為true。
(3) yarn.scheduler.fair.preemption:是否啟用搶占機(jī)制,默認(rèn)值是false。
(4) yarn.scheduler.fair.sizebasedweight:在一個(gè)隊(duì)列內(nèi)部分配資源時(shí),默認(rèn)情況下,采用公平輪詢的方法將資源分配各各個(gè)應(yīng)用程序,而該參數(shù)則提供了另外一種資源分配方式:按照應(yīng)用程序資源需求數(shù)目分配資源,即需求資源數(shù)量越多,分配的資源越多。默認(rèn)情況下,該參數(shù)值為false。
(5) yarn.scheduler.assignmultiple:是否啟動(dòng)批量分配功能。當(dāng)一個(gè)節(jié)點(diǎn)出現(xiàn)大量資源時(shí),可以一次分配完成,也可以多次分配完成。默認(rèn)情況下,該參數(shù)值為false。
(6) yarn.scheduler.fair.max.assign:如果開啟批量分配功能,可指定一次分配的container數(shù)目。默認(rèn)情況下,該參數(shù)值為-1,表示不限制。
(7) yarn.scheduler.fair.locality.threshold.node:當(dāng)應(yīng)用 程序請(qǐng)求某個(gè)節(jié)點(diǎn)上資源時(shí),它可以接受的可跳過的***資源調(diào)度機(jī)會(huì)。當(dāng)按照分配策略,可將一個(gè)節(jié)點(diǎn)上的資源分配給某個(gè)應(yīng)用程序時(shí),如果該節(jié)點(diǎn)不是應(yīng)用程序 期望的節(jié)點(diǎn),可選擇跳過該分配機(jī)會(huì)暫時(shí)將資源分配給其他應(yīng)用程序,直到出現(xiàn)滿足該應(yīng)用程序需的節(jié)點(diǎn)資源出現(xiàn)。通常而言,一次心跳代表一次調(diào)度機(jī)會(huì),而該參 數(shù)則表示跳過調(diào)度機(jī)會(huì)占節(jié)點(diǎn)總數(shù)的比例,默認(rèn)情況下,該值為-1.0,表示不跳過任何調(diào)度機(jī)會(huì)。
(8) yarn.scheduler.fair.locality.threshold.rack:當(dāng)應(yīng)用程序請(qǐng)求某個(gè)機(jī)架上資源時(shí),它可以接受的可跳過的***資源調(diào)度機(jī)會(huì)。
(9) yarn.scheduler.increment-allocation-mb:內(nèi)存規(guī)整化單位,默認(rèn)是1024,這意味著,如果一個(gè)Container請(qǐng)求資源是1.5GB,則將被調(diào)度器規(guī)整化為ceiling(1.5 GB / 1GB) * 1G=2GB。
(10) yarn.scheduler.increment-allocation-vcores:虛擬CPU規(guī)整化單位,默認(rèn)是1,含義與內(nèi)存規(guī)整化單位類似。
2. 自定義配置文件
Fair Scheduler允許用戶將隊(duì)列信息專門放到一個(gè)配置文件(默認(rèn)是fair-scheduler.xml),對(duì)于每個(gè)隊(duì)列,管理員可配置以下幾個(gè)選項(xiàng):
(1) minResources :最少資源保證量,設(shè)置格式為“X mb, Y vcores”,當(dāng)一個(gè)隊(duì)列的最少資源保證量未滿足時(shí),它將優(yōu)先于其他同級(jí)隊(duì)列獲得資源,對(duì)于不同的調(diào)度策略(后面會(huì)詳細(xì)介紹),最少資源保證量的含義不 同,對(duì)于fair策略,則只考慮內(nèi)存資源,即如果一個(gè)隊(duì)列使用的內(nèi)存資源超過了它的最少資源量,則認(rèn)為它已得到了滿足;對(duì)于drf策略,則考慮主資源使用 的資源量,即如果一個(gè)隊(duì)列的主資源量超過它的最少資源量,則認(rèn)為它已得到了滿足。
(2) maxResources:最多可以使用的資源量,fair scheduler會(huì)保證每個(gè)隊(duì)列使用的資源量不會(huì)超過該隊(duì)列的最多可使用資源量。
(3) maxRunningApps:最多同時(shí)運(yùn)行的應(yīng)用程序數(shù)目。通過限制該數(shù)目,可防止超量Map Task同時(shí)運(yùn)行時(shí)產(chǎn)生的中間輸出結(jié)果撐爆磁盤。
(4) minSharePreemptionTimeout:最小共享量搶占時(shí)間。如果一個(gè)資源池在該時(shí)間內(nèi)使用的資源量一直低于最小資源量,則開始搶占資源。
(5) schedulingMode/schedulingPolicy:隊(duì)列采用的調(diào)度模式,可以是fifo、fair或者drf。
(6) aclSubmitApps:可向隊(duì)列中提交應(yīng)用程序的Linux用戶或用戶組列表,默認(rèn)情況下為“*”,表示任何用戶均可以向該隊(duì)列提交應(yīng)用程序。需要注意的是,該屬性具有繼承性,即子隊(duì)列的列表會(huì)繼承父隊(duì)列的列表。配置該屬性時(shí),用戶之間或用戶組之間用“,”分割,用戶和用戶組之間用空格分割,比如“user1, user2 group1,group2”。
(7) aclAdministerApps:該隊(duì)列的管理員列表。一個(gè)隊(duì)列的管理員可管理該隊(duì)列中的資源和應(yīng)用程序,比如可殺死任意應(yīng)用程序。
管理員也可為單個(gè)用戶添加maxRunningJobs屬性限制其最多同時(shí)運(yùn)行的應(yīng)用程序數(shù)目。此外,管理員也可通過以下參數(shù)設(shè)置以上屬性的默認(rèn)值:
(1) userMaxJobsDefault:用戶的maxRunningJobs屬性的默認(rèn)值。
(2) defaultMinSharePreemptionTimeout :隊(duì)列的minSharePreemptionTimeout屬性的默認(rèn)值。
(3) defaultPoolSchedulingMode:隊(duì)列的schedulingMode屬性的默認(rèn)值。
(4) fairSharePreemptionTimeout:公平共享量搶占時(shí)間。如果一個(gè)資源池在該時(shí)間內(nèi)使用資源量一直低于公平共享量的一半,則開始搶占資源。
【實(shí) 例】假設(shè)要為一個(gè)Hadoop集 群設(shè)置三個(gè)隊(duì)列queueA、queueB和queueC,其中,queueB和queueC為queueA的子隊(duì)列,且規(guī)定普通用戶最多可同時(shí)運(yùn)行40 個(gè)應(yīng)用程序,但用戶userA最多可同時(shí)運(yùn)行400個(gè)應(yīng)用程序,那么可在自定義配置文件中進(jìn)行如下設(shè)置:
- <allocations>
- <queue name=”queueA”>
- <minResources>100 mb, 100 vcores</minResources>
- <maxResources>150 mb, 150 vcores</maxResources>
- <maxRunningApps>200</maxRunningApps>
- <minSharePreemptionTimeout>300</minSharePreemptionTimeout>
- <weight>1.0</weight>
- <queue name=”queueB”>
- <minResources>30 mb, 30 vcores</minResources>
- <maxResources>50 mb, 50 vcores</maxResources>
- </queue>
- <queue name=”queueC”>
- <minResources>50 mb, 50 vcores</minResources>
- <maxResources>50 mb, 50 vcores</maxResources>
- </queue>
- </queue>
- <user name=”userA”>
- <maxRunningApps>400</maxRunningApps>
- </user>
- <userMaxAppsDefault>40</userMaxAppsDefault>
- <fairSharePreemptionTimeout>6000</fairSharePreemptionTimeout>
- </allocations>
原文鏈接:http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-fair-scheduler/