目錄
一,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;
- 源碼難于了解,更新維護困難;

為了讓MR專注于計算,是以引入了YARN來負責具體的資源管理,進而提高性能。
2,什麼是YARN
YARN,Yet Another Resource Negotiator,另一種資料總管
設計目标:聚焦資源管理、通用(适用各種計算架構)、高可用(中繼資料和Master高可用)、高擴充(與HDFS同步擴充)、高容錯(計算容錯)
YARN的基本思想是将JobTracker的兩個主要功能(資源管理和作業排程/監控)分離,主要方法是建立一個全局的ResourceManager(RM)和若幹個針對應用程式的ApplicationMaster(AM)。ApplicationMaster 承擔了以前的 TaskTracker 的一些角色,ResourceManager 承擔了 JobTracker 的角色。
二,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的資源管理和作業管理職能分離開來
1.3 工作機制
基本流程
- Client向RM送出編譯好的分布式程式(Job)
- RM接收Job後,配置設定一個NM來啟動AM,并将Job指派給AM,由它來一對一管理
- AM将Job解析為一個由若幹Task組成的有向無環圖DAG,并從NameNode擷取Task輸入資料的存儲位置(即Block存儲位置),然後向RM申請計算資源
- 根據AM送出的Task Set及其對應的Block存儲位置,RM為Job配置設定計算資源,即為每個Task配置設定一個NM List,并傳回給AM(計算跟着資料走:NM所在Server的DataNode上存儲了Task的輸入Block)
- 根據Task DAG和NM List,AM按照并行/串行次序将Task送出給NM
- NM接收Task,驗證身份後,啟動Container,運作Task,并向AM彙報運作狀态和進度
- 在Job運作期間,AM向Client回報Job運作進度和狀态,并傳回最終結果
1.4 叢集部署
計算跟着資料走(NodeManager和DataNode在一個伺服器上,這樣才能做到計算跟着資料走)
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次)
三,YARN資源排程政策
1,FIFO排程器
排程政策
- 将所有作業放入一個隊列,先進隊列的先獲得資源,排在後面的作業隻能等待
缺點
- 資源使用率低,無法交叉運作作業
- 靈活性差,如緊急作業無法插隊,耗時長的作業拖慢整個隊列
2,容量排程器
核心思想
- 提前做預算,在預算指導下分享叢集資源
排程政策
- 叢集資源由多個隊列分享,并行度即隊列個數
- 每個隊列都要預設資源配置設定比例(提前做預算,預算是指導原則)
- 空閑資源優先配置設定給“實際資源/預算資源”比值最低的隊列。比如有兩個隊列,隊列A中資源占用了80%,而隊列B中隻占用了10%,則優先配置設定給隊列B(保持彈性)
- 隊列内部采用FIFO排程政策
特點
- 階層化的隊列設計:子隊列可使用父隊列資源
- 容量保證:每個隊列都要預設資源占比,防止資源獨占
- 彈性配置設定:空閑資源可以配置設定給任何隊列,但當多個隊列争用時,會按比例進行平衡
- 支援動态管理:既可以動态調整隊列的容量、權限等參數,也可以動态增加、暫停隊列
- 通路控制:使用者隻能向自己的隊列中送出作業,不能通路其他隊列
- 多租戶:多使用者共享叢集資源
3,公平排程器
排程政策
- 多隊列公平共享叢集資源
- 通過平分的方式,動态配置設定資源,無需預先設定資源配置設定比例,即“不提前做預算、見面分一半、實作絕對公平”
- 隊列内部可配置排程政策:FIFO、Fair(預設)
資源搶占
- 終止其他隊列的作業,使其讓出所占資源,然後将資源配置設定給占用資源量少于最小資源量限制的隊列(通過殺富濟貧保持彈性)
- 當隊列中有作業等待,并且叢集中有空閑資源時,每個隊列可以根據權重獲得不同比例的空閑資源(通過政策傾斜保持彈性)