您好,登錄后才能下訂單哦!
這篇文章給大家介紹Fair Scheduler相關參數有哪些,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
首先在yarn-site.xml中,將配置參數yarn.resourcemanager.scheduler.class設置為org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler。
Fair Scheduler的配置選項包括兩部分,其中一部分在yarn-site.xml中,主要用于配置調度器級別的參數,另外一部分在一個自定義配置文件(默認是fair-scheduler.xml)中,主要用于配置各個隊列的資源量、權重等信息。
想要了解Fair Scheduler是什么,可閱讀我的這篇文章“Hadoop公平調度器分析”。
1. 配置文件yarn-site.xml
(1) yarn.scheduler.fair.allocation.file :自定義XML配置文件所在位置,該文件主要用于描述各個隊列的屬性,比如資源量、權重等,具體配置格式將在后面介紹。
(2) yarn.scheduler.fair.user-as-default-queue:當應用程序未指定隊列名時,是否指定用戶名作為應用程序所在的隊列名。如果設置為false或者未設置,所有未知隊列的應用程序將被提交到default隊列中,默認值為true。
(3) yarn.scheduler.fair.preemption:是否啟用搶占機制,默認值是false。
(4) yarn.scheduler.fair.sizebasedweight:在一個隊列內部分配資源時,默認情況下,采用公平輪詢的方法將資源分配各各個應用程序,而該參數則提供了另外一種資源分配方式:按照應用程序資源需求數目分配資源,即需求資源數量越多,分配的資源越多。默認情況下,該參數值為false。
(5) yarn.scheduler.assignmultiple:是否啟動批量分配功能。當一個節點出現大量資源時,可以一次分配完成,也可以多次分配完成。默認情況下,該參數值為false。
(6) yarn.scheduler.fair.max.assign:如果開啟批量分配功能,可指定一次分配的container數目。默認情況下,該參數值為-1,表示不限制。
(7) yarn.scheduler.fair.locality.threshold.node:當應用 程序請求某個節點上資源時,它可以接受的可跳過的***資源調度機會。當按照分配策略,可將一個節點上的資源分配給某個應用程序時,如果該節點不是應用程序 期望的節點,可選擇跳過該分配機會暫時將資源分配給其他應用程序,直到出現滿足該應用程序需的節點資源出現。通常而言,一次心跳代表一次調度機會,而該參 數則表示跳過調度機會占節點總數的比例,默認情況下,該值為-1.0,表示不跳過任何調度機會。
(8) yarn.scheduler.fair.locality.threshold.rack:當應用程序請求某個機架上資源時,它可以接受的可跳過的***資源調度機會。
(9) yarn.scheduler.increment-allocation-mb:內存規整化單位,默認是1024,這意味著,如果一個Container請求資源是1.5GB,則將被調度器規整化為ceiling(1.5 GB / 1GB) * 1G=2GB。
(10) yarn.scheduler.increment-allocation-vcores:虛擬CPU規整化單位,默認是1,含義與內存規整化單位類似。
2. 自定義配置文件
Fair Scheduler允許用戶將隊列信息專門放到一個配置文件(默認是fair-scheduler.xml),對于每個隊列,管理員可配置以下幾個選項:
(1) minResources :最少資源保證量,設置格式為“X mb, Y vcores”,當一個隊列的最少資源保證量未滿足時,它將優先于其他同級隊列獲得資源,對于不同的調度策略(后面會詳細介紹),最少資源保證量的含義不 同,對于fair策略,則只考慮內存資源,即如果一個隊列使用的內存資源超過了它的最少資源量,則認為它已得到了滿足;對于drf策略,則考慮主資源使用 的資源量,即如果一個隊列的主資源量超過它的最少資源量,則認為它已得到了滿足。
(2) maxResources:最多可以使用的資源量,fair scheduler會保證每個隊列使用的資源量不會超過該隊列的最多可使用資源量。
(3) maxRunningApps:最多同時運行的應用程序數目。通過限制該數目,可防止超量Map Task同時運行時產生的中間輸出結果撐爆磁盤。
(4) minSharePreemptionTimeout:最小共享量搶占時間。如果一個資源池在該時間內使用的資源量一直低于最小資源量,則開始搶占資源。
(5) schedulingMode/schedulingPolicy:隊列采用的調度模式,可以是fifo、fair或者drf。
(6) aclSubmitApps:可向隊列中提交應用程序的Linux用戶或用戶組列表,默認情況下為“*”,表示任何用戶均可以向該隊列提交應用程序。需要注意的是,該屬性具有繼承性,即子隊列的列表會繼承父隊列的列表。配置該屬性時,用戶之間或用戶組之間用“,”分割,用戶和用戶組之間用空格分割,比如“user1, user2 group1,group2”。
(7) aclAdministerApps:該隊列的管理員列表。一個隊列的管理員可管理該隊列中的資源和應用程序,比如可殺死任意應用程序。
管理員也可為單個用戶添加maxRunningJobs屬性限制其最多同時運行的應用程序數目。此外,管理員也可通過以下參數設置以上屬性的默認值:
(1) userMaxJobsDefault:用戶的maxRunningJobs屬性的默認值。
(2) defaultMinSharePreemptionTimeout :隊列的minSharePreemptionTimeout屬性的默認值。
(3) defaultPoolSchedulingMode:隊列的schedulingMode屬性的默認值。
(4) fairSharePreemptionTimeout:公平共享量搶占時間。如果一個資源池在該時間內使用資源量一直低于公平共享量的一半,則開始搶占資源。
【實 例】假設要為一個Hadoop集 群設置三個隊列queueA、queueB和queueC,其中,queueB和queueC為queueA的子隊列,且規定普通用戶最多可同時運行40 個應用程序,但用戶userA最多可同時運行400個應用程序,那么可在自定義配置文件中進行如下設置:
<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>
關于Fair Scheduler相關參數有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。