Fair Scheduler總結
默認公平調度調度策略僅僅基於內存資源,通過使用DRF(Dominant Resource Fairness)能夠配置基於內存和CPU資源任務調度。
當只有一個應用運行的時候,該應用能夠使用整個集羣。當其他應用提交到集羣,空閒出來的資源將分配給新提交的應用,這樣每個應用能夠得到大致相同的資源。Hadoop默認調度器,形成一個應用的隊列,如此小應用可以在一個合理時間範圍內完成,並且不會讓大應用長時間等待資源。這也是一個合理方式在許多用戶中分享集羣資源。最後,公平調度可以設置應用的優先度,設置優先度權重決定應用佔用資源比例。
可插入策略的分層隊列
公平調度支持分層隊列,所有的隊列從root隊列延伸。典型的公平調度方式是把可用資源分佈在可用的root隊列的子隊列當中。應用程序只能在葉子隊列中被調度。一個隊列可以被指定爲其他隊列的子隊列。指定一個有層級的隊列需要同時指定上級隊列。例如 root.queue1 root.queue1.queue2。
公平調度可以配置自定義的調度策略,比如FifiPolicy,FairSharePolicy,DominantResourceFairnessPolicy
使用公平調度需要在yarn-site.xml中配置如下內容
<property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value> </property>
配置公平調度主要包含兩個文件,首先是yarn-site.xml,在Hadoop配置目錄下,其次需要創建一個配置文件fair-scheduler.xml,主要配置隊列的權重和資源容量等。
<?xml version="1.0"?> <allocations> <queue name="sample_queue"> <minResources>10000 mb,0vcores</minResources> <maxResources>90000 mb,0vcores</maxResources> <maxRunningApps>50</maxRunningApps> <maxAMShare>0.1</maxAMShare> <weight>2.0</weight> <schedulingPolicy>fair</schedulingPolicy> <queue name="sample_sub_queue"> <aclSubmitApps>charlie</aclSubmitApps> <minResources>5000 mb,0vcores</minResources> </queue> </queue> <queueMaxAMShareDefault>0.5</queueMaxAMShareDefault> <queueMaxResourcesDefault>40000 mb,0vcores</queueMaxResourcesDefault> <!-- Queue 'secondary_group_queue' is a parent queue and may have user queues under it --> <queue name="secondary_group_queue" type="parent"> <weight>3.0</weight> </queue> <user name="sample_user"> <maxRunningApps>30</maxRunningApps> </user> <userMaxAppsDefault>5</userMaxAppsDefault> <queuePlacementPolicy> <rule name="specified" /> <rule name="primaryGroup" create="false" /> <rule name="nestedUserQueue"> <rule name="secondaryGroupExistingQueue" create="false" /> </rule> <rule name="default" queue="sample_queue"/> </queuePlacementPolicy> </allocations>
隊列訪問控制列表
ACLs對隊列進行控制,管理哪些用戶可以訪問特定隊列。主要包括了aclSubmitApps 和aclAdministerApps配置項,每個隊列都可以配置這兩個 參數。