天天看點

【單點】每日突破,Yarn公平排程配置

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分鐘收獲一點!今天你打卡了沒?

後話

如果有幫助的,記得點贊、關注。在公衆号《數舟》中,可以免費擷取專欄《資料倉庫》配套的視訊課程、大資料叢集自動安裝腳本,并擷取進群交流的途徑。

我所有的大資料技術内容也會優先釋出到公衆号中。如果對某些大資料技術有興趣,但沒有充足的時間,在群裡提出,我為大家安排分享。