hadoop之yarn詳解(基礎架構篇)

本文主要從yarn的基礎架構和yarn的做業執行流程進行闡述html

1、yarn的概述

       Apache Yarn(Yet Another Resource Negotiator的縮寫)是hadoop集羣資源管理器系統,Yarn從hadoop 2引入,最初是爲了改善MapReduce的實現,可是它具備通用性,一樣執行其餘分佈式計算模式。sql

在MapReduce1中,具備以下侷限性:apache

一、擴展性差:jobtracker兼顧資源管理和做業控制跟蹤功能跟蹤任務,啓動失敗或遲緩的任務,記錄任務的執行狀態,維護計數器),壓力大,成爲系統的瓶頸
二、可靠性差:採用了master/slave結構,master容易單點故障
三、資源利用率低:基於槽位的資源分配模型,槽位是一種粗粒度的資源劃分單位,一般一個任務不會用完一個槽位的資源,hadoop1分爲map slot和reduce slot,而它們之間資源不共享,形成一些資源空閒。
四、不支持多框架:不支持多種計算框架並行安全

  yarn很好解決了MapReduce1中的侷限性:yarn基本思想;一個全局的資源管理器resourcemanager和與每一個應用對用的ApplicationMaster,Resourcemanager和NodeManager組成全新的通用系統,以分佈式的方式管理應用程序。網絡

因此針對MapReduce1,yarn就有了以下特色:架構

一、支持非mapreduce應用的需求
二、可擴展性
三、提升資源是用率
四、用戶敏捷性
五、能夠經過搭建爲高可用app

2、yarn架構組件

        Yarn從總體上仍是屬於master/slave模型,主要依賴於三個組件來實現功能,第一個就是ResourceManager,是集羣資源的仲裁者,它包括兩部分:一個是可插拔式的調度Scheduler,一個是ApplicationManager,用於管理集羣中的用戶做業。第二個是每一個節點上的NodeManager,管理該節點上的用戶做業和工做流,也會不斷髮送本身Container使用狀況給ResourceManager。第三個組件是ApplicationMaster,用戶做業生命週期的管理者它的主要功能就是向ResourceManager(全局的)申請計算資源(Containers)而且和NodeManager交互來執行和監控具體的task。架構圖以下:框架

 

 

2.一、Resourcemanager 

    ResourceManager 擁有系統全部資源分配的決定權,負責集羣中全部應用程序的資源分配,擁有集羣資源主要、全局視圖。所以爲用戶提供公平的,基於容量的,本地化資源調度。根據程序的需求,調度優先級以及可用資源狀況,動態分配特定節點運行應用程序。它與每一個節點上的NodeManager和每個應用程序的ApplicationMaster協調工做。分佈式

   ResourceManager的主要職責在於調度,即在競爭的應用程序之間分配系統中的可用資源,並不關注每一個應用程序的狀態管理。oop

   ResourceManager主要有兩個組件:Scheduler和ApplicationManager:Scheduler是一個資源調度器,它主要負責協調集羣中各個應用的資源分配,保障整個集羣的運行效率。Scheduler的角色是一個純調度器,它只負責調度Containers,不會關心應用程序監控及其運行狀態等信息。一樣,它也不能重啓因應用失敗或者硬件錯誤而運行失敗的任務。

2.1.一、Scheduler

    Scheduler是一個可插拔的插件,負責各個運行中的應用的資源分配,受到資源容量,隊列以及其餘因素的影響。是一個純粹的調度器,不負責應用程序的監控和狀態追蹤,不保證應用程序的失敗或者硬件失敗的狀況對task重啓,而是基於應用程序的資源需求執行其調度功能,使用了叫作資源container的概念,其中包括多種資源,好比,cpu,內存,磁盤,網絡等。在Hadoop的MapReduce框架中主要有三種Scheduler:FIFO Scheduler,Capacity Scheduler和Fair Scheduler。

FIFO Scheduler:先進先出,不考慮做業優先級和範圍,適合低負載集羣。
Capacity Scheduler:將資源分爲多個隊列,容許共享集羣,有保證每一個隊列最小資源的使用。
Fair Scheduler:公平的將資源分給應用的方式,使得全部應用在平均狀況下隨着時間獲得相同的資源份額。

2.1.二、ApplicationManager

    ApplicationManager主要負責接收job的提交請求,爲應用分配第一個Container來運行ApplicationMaster,還有就是負責監控ApplicationMaster,在遇到失敗時重啓ApplicationMaster運行的Container

2.二、NodeManager

    NodeManager是yarn節點的一個「工做進程」代理,管理hadoop集羣中獨立的計算節點,主要負責與ResourceManager通訊,負責啓動和管理應用程序的container的生命週期,監控它們的資源使用狀況(cpu和內存),跟蹤節點的監控狀態,管理日誌等。並報告給RM。

    NodeManager在啓動時,NodeManager向ResourceManager註冊,而後發送心跳包來等待ResourceManager的指令,主要目的是管理resourcemanager分配給它的應用程序container。NodeManager只負責管理自身的Container,它並不知道運行在它上面應用的信息。在運行期,經過NodeManager和ResourceManager協同工做,這些信息會不斷被更新並保障整個集羣發揮出最佳狀態

主要職責:
一、接收ResourceManager的請求,分配Container給應用的某個任務
二、和ResourceManager交換信息以確保整個集羣平穩運行。ResourceManager就是經過收集每一個NodeManager的報告信息來追蹤整個集羣健康狀態的,而NodeManager負責監控自身的健康狀態。
三、管理每一個Container的生命週期
四、管理每一個節點上的日誌
五、執行Yarn上面應用的一些額外的服務,好比MapReduce的shuffle過程

2.2.一、Container

     Container是Yarn框架的計算單元,是具體執行應用task(如map task、reduce task)的基本單位。Container和集羣節點的關係是:一個節點會運行多個Container,但一個Container不會跨節點。

   一個Container就是一組分配的系統資源,現階段只包含兩種系統資源(以後可能會增長磁盤、網絡、GPU等資源),由NodeManager監控,Resourcemanager調度。

   每個應用程序從ApplicationMaster開始,它自己就是一個container(第0個),一旦啓動,ApplicationMaster就會更加任務需求與Resourcemanager協商更多的container,在運行過程當中,能夠動態釋放和申請container。

2.三、ApplicationMaster

     ApplicationMaster負責與scheduler協商合適的container,跟蹤應用程序的狀態,以及監控它們的進度,ApplicationMaster是協調集羣中應用程序執行的進程。每一個應用程序都有本身的ApplicationMaster,負責與ResourceManager協商資源(container)和NodeManager協同工做來執行和監控任務 。

    當一個ApplicationMaster啓動後,會週期性的向resourcemanager發送心跳報告來確認其健康和所需的資源狀況,在建好的需求模型中,ApplicationMaster在發往resourcemanager中的心跳信息中封裝偏好和限制,在隨後的心跳中,ApplicationMaster會對收到集羣中特定節點上綁定了必定的資源的container的租約,根據Resourcemanager發來的container,ApplicationMaster能夠更新它的執行計劃以適應資源不足或者過剩,container能夠動態的分配和釋放資源。

3、yarn做業調度流程

Application在Yarn中的執行過程以下圖所示:

 

 

一、客戶端程序向ResourceManager提交應用並請求一個ApplicationMaster實例,ResourceManager在應答中給出一個applicationID以及有助於客戶端請求資源的資源容量信息。

二、ResourceManager找到能夠運行一個Container的NodeManager,並在這個Container中啓動ApplicationMaster實例

Application Submission Context發出響應,其中包含有:ApplicationID,用戶名,隊列以及其餘啓動ApplicationMaster的信息,
Container Launch Context(CLC)也會發給ResourceManager,CLC提供了資源的需求,做業文件,安全令牌以及在節點啓動ApplicationMaster所須要的其餘信息。
當ResourceManager接收到客戶端提交的上下文,就會給ApplicationMaster調度一個可用的container(一般稱爲container0)。而後ResourceManager就會聯繫NodeManager啓動ApplicationMaster,並創建ApplicationMaster的RPC端口和用於跟蹤的URL,用來監控應用程序的狀態。

三、ApplicationMaster向ResourceManager進行註冊,註冊以後客戶端就能夠查詢ResourceManager得到本身ApplicationMaster的詳細信息,之後就能夠和本身的ApplicationMaster直接交互了。在註冊響應中,ResourceManager會發送關於集羣最大和最小容量信息,

四、在日常的操做過程當中,ApplicationMaster根據resource-request協議向ResourceManager發送resource-request請求,ResourceManager會根據調度策略儘量最優的爲ApplicationMaster分配container資源,做爲資源請求的應答發個ApplicationMaster

五、當Container被成功分配以後,ApplicationMaster經過向NodeManager發送container-launch-specification信息來啓動Container, container-launch-specification信息包含了可以讓Container和ApplicationMaster交流所須要的資料,一旦container啓動成功以後,ApplicationMaster就能夠檢查他們的狀態,Resourcemanager不在參與程序的執行,只處理調度和監控其餘資源,Resourcemanager能夠命令NodeManager殺死container,

六、應用程序的代碼在啓動的Container中運行,並把運行的進度、狀態等信息經過application-specific協議發送給ApplicationMaster,隨着做業的執行,ApplicationMaster將心跳和進度信息發給ResourceManager,在這些心跳信息中,ApplicationMaster還能夠請求和釋放一些container。

七、在應用程序運行期間,提交應用的客戶端主動和ApplicationMaster交流得到應用的運行狀態、進度更新等信息,交流的協議也是application-specific協議

八、一但應用程序執行完成而且全部相關工做也已經完成,ApplicationMaster向ResourceManager取消註冊而後關閉,用到全部的Container也歸還給系統,當container被殺死或者回收,Resourcemanager都會通知NodeManager聚合日誌並清理container專用的文件。

 

更多hadoop生態文章見: hadoop生態系列

參考:

https://hadoop.apache.org/docs/r2.7.7/hadoop-yarn/hadoop-yarn-site/YARN.html

 

《hadoop yarn權威指南》

相關文章
相關標籤/搜索