天天看點

04-分布式資源管理系統YARN

目錄

​​一,YARN簡介​​

​​1,YARN的由來​​

​​2,什麼是YARN​​

​​二,YARN原理​​

​​1,系統架構​​

​​1.1 角色分工​​

​​1.2 設計思想​​

​​1.3 工作機制​​

​​1.4 叢集部署​​

​​2,YARN高可用​​

​​三,YARN資源排程政策​​

​​1,FIFO排程器​​

​​2,容量排程器​​

​​3,公平排程器​​

文章内容來自:南京大學 / 星環科技課程,大資料理論與實踐課程Ⅰ

對細節部分引用其他網絡資源進行補充。

一,YARN簡介

1,YARN的由來

Hadoop 1.x中的MapReduce存在先天缺陷:

  • 既是計算架構,又是資源管理系統;
  • 僅把Task數量看作資源,沒有考慮CPU和記憶體;
  • 擴充性較差,叢集規模上限4K;
  • 源碼難于了解,更新維護困難;
04-分布式資源管理系統YARN

為了讓MR專注于計算,是以引入了YARN來負責具體的資源管理,進而提高性能。

2,什麼是YARN

YARN,Yet Another Resource Negotiator,另一種資料總管

設計目标:聚焦資源管理、通用(适用各種計算架構)、高可用(中繼資料和Master高可用)、高擴充(與HDFS同步擴充)、高容錯(計算容錯)

YARN的基本思想是将JobTracker的兩個主要功能(資源管理和作業排程/監控)分離,主要方法是建立一個全局的ResourceManager(RM)和若幹個針對應用程式的ApplicationMaster(AM)。ApplicationMaster 承擔了以前的 TaskTracker 的一些角色,ResourceManager 承擔了 JobTracker 的角色。

04-分布式資源管理系統YARN

二,YARN原理

1,系統架構

1.1 角色分工

四種角色:ResourceManager、ApplicationMaster(作業管家)、NodeManager、Client

1, Active ResourceManager(ARM)

  • 活動資源管理節點(Master / 叢集唯一)
  • 統一管理叢集計算資源
  • 負責啟動ApplicationMaster、作業指派和監控
  • 将資源按照一定的排程政策配置設定給作業
  • 接收NodeManager的運作狀況和資源上報資訊

2,Standby ResourceManager(SRM)

  • 熱備資源管理節點(允許多個)
  • 主備切換
  • -AR當機後,經過Master選舉和狀态資訊恢複,SRM更新為ARM
  • -重新開機AM,殺死所有運作中的Container

3,ApplicationMaster(AM)

作業管家

  • 一對一管理:每個作業執行個體都由一個專職的AM來管理
  • 作業解析:将Job解析為由若幹Task組成的有向無環圖
  • 申請資源:向RM申請Job運作所需的計算資源
  • 任務排程和監管:向NM申請配置設定Container和啟動Task,同時監測Task的運作狀态和進度
  • 回報:向Client回報Job的運作狀态和結果

實作方式

  • YARN預設提供MapReduce的AM實作,但其他計算架構需自備作業管理元件(如Spark Driver)
  • 采用基于事件驅動的異步程式設計模型,由中央事件排程器統一管理所有事件
  • AM是一種事件處理器,在中央事件排程器中注冊,這樣可實作解耦,以確定YARN的通用性

4,NodeManager(NM)

  • 計算節點(Slave / 高擴充)
  • 管理單個節點的資源
  • 管理Container的生命周期(從建立到銷毀的全過程)
  • 向ResourceManager彙報運作狀況和資源使用情況

5,Container

  • 容器:對程序相關資源的封裝,對資源的抽象,配置設定資源即配置設定Container
  • 分為兩類:運作AM的Container 、運作Task的Container

1.2 設計思想

将JobTracker的資源管理和作業管理職能分離開來

04-分布式資源管理系統YARN

1.3 工作機制

04-分布式資源管理系統YARN

基本流程

  1. Client向RM送出編譯好的分布式程式(Job)
  2. RM接收Job後,配置設定一個NM來啟動AM,并将Job指派給AM,由它來一對一管理
  3. AM将Job解析為一個由若幹Task組成的有向無環圖DAG,并從NameNode擷取Task輸入資料的存儲位置(即Block存儲位置),然後向RM申請計算資源
  4. 根據AM送出的Task Set及其對應的Block存儲位置,RM為Job配置設定計算資源,即為每個Task配置設定一個NM List,并傳回給AM(計算跟着資料走:NM所在Server的DataNode上存儲了Task的輸入Block)
  5. 根據Task DAG和NM List,AM按照并行/串行次序将Task送出給NM
  6. NM接收Task,驗證身份後,啟動Container,運作Task,并向AM彙報運作狀态和進度
  7. 在Job運作期間,AM向Client回報Job運作進度和狀态,并傳回最終結果

1.4 叢集部署

 計算跟着資料走(NodeManager和DataNode在一個伺服器上,這樣才能做到計算跟着資料走)

04-分布式資源管理系統YARN

2,YARN高可用

基于ZK的中繼資料高可用

  • RM狀态
  • Job狀态和Token(通路身份驗證)

基于ZK的RM高可用(主備切換)

  • Master選舉
  • 恢複RM的原有狀态資訊
  • 重新開機AM,并殺死所有運作中的Container(task太多了,而且實時變化,不好存儲。是以AM挂掉之後,job相關的task要全部kill掉,重新執行)

計算高可用

  • Task失敗後,AM會把其排程到其他NM上重新執行(預設4次)
  • Job失敗後,RM會在其他NM上重新開機AM(預設2次)
04-分布式資源管理系統YARN

三,YARN資源排程政策

1,FIFO排程器

排程政策

  • 将所有作業放入一個隊列,先進隊列的先獲得資源,排在後面的作業隻能等待

缺點

  • 資源使用率低,無法交叉運作作業
  • 靈活性差,如緊急作業無法插隊,耗時長的作業拖慢整個隊列
04-分布式資源管理系統YARN

2,容量排程器

核心思想

  • 提前做預算,在預算指導下分享叢集資源

排程政策

  • 叢集資源由多個隊列分享,并行度即隊列個數
  • 每個隊列都要預設資源配置設定比例(提前做預算,預算是指導原則)
  • 空閑資源優先配置設定給“實際資源/預算資源”比值最低的隊列。比如有兩個隊列,隊列A中資源占用了80%,而隊列B中隻占用了10%,則優先配置設定給隊列B(保持彈性)
  • 隊列内部采用FIFO排程政策

特點

  • 階層化的隊列設計:子隊列可使用父隊列資源
  • 容量保證:每個隊列都要預設資源占比,防止資源獨占
  • 彈性配置設定:空閑資源可以配置設定給任何隊列,但當多個隊列争用時,會按比例進行平衡
  • 支援動态管理:既可以動态調整隊列的容量、權限等參數,也可以動态增加、暫停隊列
  • 通路控制:使用者隻能向自己的隊列中送出作業,不能通路其他隊列
  • 多租戶:多使用者共享叢集資源
04-分布式資源管理系統YARN

3,公平排程器

排程政策

  • 多隊列公平共享叢集資源
  • 通過平分的方式,動态配置設定資源,無需預先設定資源配置設定比例,即“不提前做預算、見面分一半、實作絕對公平”
  • 隊列内部可配置排程政策:FIFO、Fair(預設)

資源搶占

  • 終止其他隊列的作業,使其讓出所占資源,然後将資源配置設定給占用資源量少于最小資源量限制的隊列(通過殺富濟貧保持彈性)
  • 當隊列中有作業等待,并且叢集中有空閑資源時,每個隊列可以根據權重獲得不同比例的空閑資源(通過政策傾斜保持彈性)

繼續閱讀