Yarn公平排程配置
問:如何配置Yarn公平排程。
答:
- 首先在yarn-site.xml中進行全局配置,表示開啟公平排程政策。
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
<description>開啟公平排程政策</description>
</property>
<property>
<name>yarn.scheduler.fair.allocation.file</name>
<value>/opt/app/hadoop-2.7.7/etc/hadoop/fair-scheduler.xml</value>
<description>公平排程政策配置檔案目錄</description>
</property>
<property>
<name>yarn.scheduler.fair.preemption</name>
<value>true</value>
<description>開啟資源搶占</description>
</property>
<property>
<name>yarn.scheduler.fair.preemption.cluster-utilization-threshold</name>
<value>0.8f</value>
<description>當叢集的整體資源使用率超過80%,則開始搶占</description>
</property>
<property>
<name>yarn.scheduler.fair.user-as-default-queue</name>
<value>true</value>
<description>預設送出到default隊列</description>
</property>
<property>
<name>yarn.scheduler.fair.allow-undeclared-pools</name>
<value>false</value>
<description>任務無法送出到現有隊列,是否允許建立一個隊列</description>
</property>
複制
- 然後再編輯fair-scheduler.xml,對公平排程進行詳細配置。
<?xml version="1.0"?>
<allocations>
<!-- 每個隊列中的預設排程政策,預設值是fair -->
<defaultQueueSchedulingPolicy>fair</defaultQueueSchedulingPolicy>
<user name="hadoop">
<!-- 使用者hadoop最多運作的任務數 -->
<maxRunningApps>30</maxRunningApps>
</user>
<!-- 預設運作任務數 -->
<userMaxAppsDefault>10</userMaxAppsDefault>
<!-- 隊列劃分 -->
<!-- 共有4個隊列:default、hadoop、develop、test -->
<!-- 權重weight分别是:1、2、1、1.5 -->
<queue name="root">
<minResources>512mb,4vcores</minResources>
<maxResources>102400mb,100vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<weight>1.0</weight>
<schedulingMode>fair</schedulingMode>
<aclSubmitApps> </aclSubmitApps>
<aclAdministerApps> </aclAdministerApps>
<queue name="default">
<minResources>512mb,4vcores</minResources>
<maxResources>30720mb,30vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>1.0</weight>
<!-- 允許送出任務的使用者群組 -->
<!-- 格式為:使用者名1,使用者名2 使用者名1所屬組,使用者名2所屬組 -->
<!-- * 表示接收所有使用者的任務 -->
<!-- 預設情況下,當任務沒有指定隊列時,會送出到default中 -->
<aclSubmitApps>*</aclSubmitApps>
</queue>
<queue name="hadoop">
<minResources>512mb,4vcores</minResources>
<maxResources>20480mb,20vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>2.0</weight>
<!-- 允許送出任務的使用者群組 -->
<aclSubmitApps>hadoop hadoop</aclSubmitApps>
<!-- 允許管理任務的使用者群組 -->
<aclAdministerApps>hadoop hadoop</aclAdministerApps>
</queue>
<queue name="develop">
<minResources>512mb,4vcores</minResources>
<maxResources>20480mb,20vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>1</weight>
<aclSubmitApps>develop develop</aclSubmitApps>
<aclAdministerApps>develop develop</aclAdministerApps>
</queue>
<queue name="test">
<minResources>512mb,4vcores</minResources>
<maxResources>20480mb,20vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>1.5</weight>
<aclSubmitApps>test,hadoop,develop test</aclSubmitApps>
<aclAdministerApps>test group_businessC,supergroup</aclAdministerApps>
</queue>
</queue>
<!-- 任務送出規則,由scheduler排程器決定送出的任務進入指定隊列 -->
<!-- 包含多個rule标簽,rule标簽預設情況下create參數=true,表示目前rule可以建立一個新隊列來存放任務 -->
<queuePlacementPolicy>
<!-- 任務被送出到指定的隊列;如果隊列不存在,則不建立 -->
<rule name="specified" create="false"/>
<!-- 任務被送出到,以送出使用者所屬組名稱所命名的隊列;如果隊列不存在,則不建立 -->
<rule name="primaryGroup" create="false" />
<!-- 當不滿足以上規則,則送出到root.default隊列(預設值) -->
<rule name="default" queue="root.default"/>
</queuePlacementPolicy>
</allocations>
複制
今天的單點,你是否get到了呢?每日單點,用5分鐘收獲一點!今天你打卡了沒?
後話
如果有幫助的,記得點贊、關注。在公衆号《數舟》中,可以免費擷取專欄《資料倉庫》配套的視訊課程、大資料叢集自動安裝腳本,并擷取進群交流的途徑。
我所有的大資料技術内容也會優先釋出到公衆号中。如果對某些大資料技術有興趣,但沒有充足的時間,在群裡提出,我為大家安排分享。