YARN資源調度策略之Capacity Scheduler

来源:http://www.cnblogs.com/bugsbunny/archive/2017/04/27/6773016.html
-Advertisement-
Play Games

背景 yarn預設使用的是最簡單的FIFO調度器,即一個default隊列,所有用戶共用,分配資源也是先到先得,沒有優先順序之分。有時一兩個任務就把資源全占了,其他任務吃不到資源造成饑餓,顯然這樣的資源分配是不合理的(在當今社會主義之中,我們要共同富裕啊)。yarn還有兩種資源調度器,capacity ...


背景

yarn預設使用的是最簡單的FIFO調度器,即一個default隊列,所有用戶共用,分配資源也是先到先得,沒有優先順序之分。有時一兩個任務就把資源全占了,其他任務吃不到資源造成饑餓,顯然這樣的資源分配是不合理的(在當今社會主義之中,我們要共同富裕啊)。yarn還有兩種資源調度器,capacity schedule和fair schedule,本文主要研究下capacity schedule。

什麼是capacity schedule

Capacity Schedule調度器以隊列為單位劃分資源。簡單通俗點來說,就是一個個隊列有獨立的資源,隊列的結構和資源是可以進行配置的,如下圖:

default隊列占30%資源,analyst和dev分別占40%和30%資源;類似的,analyst和dev各有兩個子隊列,子隊列在父隊列的基礎上再分配資源。

隊列以分層方式組織資源,設計了多層級別的資源限制條件以更好的讓多用戶共用一個Hadoop集群,比如隊列資源限制、用戶資源限制、用戶應用程式數目限制。隊列里的應用以FIFO方式調度,每個隊列可設定一定比例的資源最低保證和使用上限,同時,每個用戶也可以設定一定的資源使用上限以防止資源濫用。而當一個隊列的資源有剩餘時,可暫時將剩餘資源共用給其他隊列。

特性

Capacity調度器具有以下的幾個特性:
● 層次化的隊列設計,這種層次化的隊列設計保證了子隊列可以使用父隊列設置的全部資源。這樣通過層次化的管理,更容易合理分配和限制資源的使用。
● 容量保證,隊列上都會設置一個資源的占比,這樣可以保證每個隊列都不會占用整個集群的資源。
● 安全,每個隊列又嚴格的訪問控制。用戶只能向自己的隊列裡面提交任務,而且不能修改或者訪問其他隊列的任務。
● 彈性分配,空閑的資源可以被分配給任何隊列。當多個隊列出現爭用的時候,則會按照比例進行平衡。
● 多租戶租用,通過隊列的容量限制,多個用戶就可以共用同一個集群,同時保證每個隊列分配到自己的容量,提高利用率。
● 操作性,yarn支持動態修改調整容量、許可權等的分配,可以在運行時直接修改。還提供給管理員界面,來顯示當前的隊列狀況。管理員可以在運行時,添加一個隊列;但是不能刪除一個隊列。管理員還可以在運行時暫停某個隊列,這樣可以保證當前的隊列在執行過程中,集群不會接收其他的任務。如果一個隊列被設置成了stopped,那麼就不能向他或者子隊列上提交任務了。
● 基於資源的調度,協調不同資源需求的應用程式,比如記憶體、CPU、磁碟等等。

配置

開啟調度器

在ResourceManager中配置它要使用的調度器,配置方式是修改conf/yarn-site.xml,設置屬性:

<property>
    <name>yarn.resourcemanager.scheduler.class</name>   
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>

配置隊列

調度器的核心就是隊列的分配和使用了,修改conf/capacity-scheduler.xml可以配置隊列。
Capacity調度器預設有一個預定義的隊列——root,所有的隊列都是它的子隊列。隊列的分配支持層次化的配置,使用.來進行分割,比如yarn.scheduler.capacity.<queue-path>.queues

下麵是配置的樣例,比如root下麵有三個子隊列:

<property>
  <name>yarn.scheduler.capacity.root.queues</name>
  <value>a,b,c</value>
  <description>The queues at the this level (root is the root queue).
  </description>
</property>

<property>
  <name>yarn.scheduler.capacity.root.a.queues</name>
  <value>a1,a2</value>
  <description>The queues at the this level (root is the root queue).
  </description>
</property>

<property>
  <name>yarn.scheduler.capacity.root.b.queues</name>
  <value>b1,b2,b3</value>
  <description>The queues at the this level (root is the root queue).
  </description>
</property>

隊列屬性

yarn.scheduler.capacity.<queue-path>.capacity

它是隊列的資源容量占比(百分比)。系統繁忙時,每個隊列都應該得到設置的量的資源;當系統空閑時,該隊列的資源則可以被其他的隊列使用。同一層的所有隊列加起來必須是100%。

yarn.scheduler.capacity.<queue-path>.maximum-capacity

隊列資源的使用上限。由於系統空閑時,隊列可以使用其他的空閑資源,因此最多使用的資源量則是該參數控制。預設是-1,即禁用。

yarn.scheduler.capacity.<queue-path>.minimum-user-limit-percent

每個任務占用的最少資源。比如,你設置成了25%。那麼如果有兩個用戶提交任務,那麼每個任務資源不超過50%。如果3個用戶提交任務,那麼每個任務資源不超過33%。如果4個用戶提交任務,那麼每個任務資源不超過25%。如果5個用戶提交任務,那麼第五個用戶需要等待才能提交。預設是100,即不去做限制。

yarn.scheduler.capacity.<queue-path>.user-limit-factor

每個用戶最多使用的隊列資源占比,如果設置為50.那麼每個用戶使用的資源最多就是50%。

運行和提交應用限制

yarn.scheduler.capacity.maximum-applications / yarn.scheduler.capacity.<queue-path>.maximum-applications

設置系統中可以同時運行和等待的應用數量。預設是10000.

yarn.scheduler.capacity.maximum-am-resource-percent / yarn.scheduler.capacity.<queue-path>.maximum-am-resource-percent

設置有多少資源可以用來運行app master,即控制當前激活狀態的應用。預設是10%。

隊列管理

yarn.scheduler.capacity.<queue-path>.state

隊列的狀態,可以使RUNNING或者STOPPED.如果隊列是STOPPED狀態,那麼新應用不會提交到該隊列或者子隊列。同樣,如果root被設置成STOPPED,那麼整個集群都不能提交任務了。現有的應用可以等待完成,因此隊列可以優雅的退出關閉。

yarn.scheduler.capacity.root.<queue-path>.acl_submit_applications

訪問控制列表ACL控制誰可以向該隊列提交任務。如果一個用戶可以向該隊列提交,那麼也可以提交任務到它的子隊列。

yarn.scheduler.capacity.root.<queue-path>.acl_administer_queue

設置隊列的管理員的ACL控制,管理員可以控制隊列的所有應用程式。同樣,它也具有繼承性。

註意:ACL的設置是user1,user2 group1,group2這種格式。如果是則代表任何人。空格表示任何人都不允許。預設是.

其他屬性

yarn.scheduler.capacity.resource-calculator

資源計算方法,預設是org.apache.hadoop.yarn.util.resource.DefaultResourseCalculator,它只會計算記憶體。DominantResourceCalculator則會計算記憶體和CPU。

yarn.scheduler.capacity.node-locality-delay

調度器嘗試進行調度的次數。一般都是跟集群的節點數量有關。預設40(一個機架上的節點數)
一旦設置完這些隊列屬性,就可以在web ui上看到了。可以訪問下麵的連接:
xxx:8088/scheduler

修改隊列配置

如果想要修改隊列或者調度器的配置,可以修改

vi $HADOOP_CONF_DIR/capacity-scheduler.xml

修改完成後,需要執行下麵的命令:

$HADOOP_YARN_HOME/bin/yarn rmadmin -refreshQueues

註意:

  • 隊列不能被刪除,只能新增。
  • 更新隊列的配置需要是有效的值
  • 同層級的隊列容量限制相加需要等於100%。
  • 如果希望自己的任務調度到queue1隊列,只需在啟動任務時指定:mapreduce.job.queuename參數為queue1即可,預設為default隊列

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 資料庫恢復失敗,原來的數據卻變成了 當嘗試打開資料庫的屬性,即出現上面圖片異常的信息。正常來說,是可以打開資料庫的屬性 此刻,你可以運行SQL語句來解決: USE master; GO ALTER DATABASE [Tutorial] SET SINGLE_USER WITH ROLLBACK I ...
  • 用EXISTS替代IN用NOT EXISTS替代NOT IN用表連接[left、right、inner]查詢替換EXISTS ...
  • 沒有偶然的運氣,只有不斷的努力! There is no accidental luck, only constant efforts! 首先 新聞發佈會結合了JSP里的Servlet和request對象,response對象還有使用session對象和cookie對象。 -登錄頁面 package ...
  • 【註】關閉window的防火牆 1. 安裝開發hadoop插件 將hadoop安裝包hadoop-eclipse-plugin-2.7.3拷貝到eclipse的插件目錄plugins下。 插件百度雲地址:http://pan.baidu.com/s/1dEXywz3 重啟eclipse,打開wind ...
  • R + Hive = RHive 支持原創:http://blog.fens.me/nosql-r-hive/ R利劍NoSQL系列文章 之 Hive Hive介紹 Hive安裝 RHive安裝 RHive函數庫 RHive基本使用操作 1. Hive介紹 Hive是建立在Hadoop上的數據倉庫基 ...
  • 在使用JDBC連接mysql時可能會遇到以下錯誤: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent successfully to th ...
  • 1. 忘記root密碼編輯mysql主配置文件 my.cnf 在[mysqld]欄位下添加參數 skip-grant ,重啟資料庫服務,這樣就可以進入資料庫不用授權了 mysql -uroot ,修改相應用戶密碼 use mysql; update user set password=passwor ...
  • 使用下麵的命令檢查是否安裝有MySQL Server 有的話,我們就通過 rpm -e 命令 或者 rpm -e --nodeps 命令來卸載掉 在刪除完以後我們可以通過 rpm -qa | grep mysql 命令來查看mysql是否已經卸載成功!! 官網yum repository 下載安裝包 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...