1. 程式人生 > 其它 >Hadoop生態二---yarn

Hadoop生態二---yarn

Yarn是一個資源排程平臺,負責為運算程式提供伺服器運算資源,相當於一個分散式的作業系統平臺,而mapreduce等運算程式則相當於運行於作業系統之上的應用程式Yarn是一個資源排程平臺,負責為運算程式提供伺服器運算資源,相當於一個分散式的作業系統平臺,而mapreduce等運算程式則相當於運行於作業系統之上的應用程式。

YARN的基本設計思想是將MapReduce V1中的JobTracker拆分為兩個獨立的服務:ResourceManager和ApplicationMaster。ResourceManager負責整個系統的資源管理和分配,ApplicationMaster負責單個應用程式的的管理。

  • ResourceManager
    RM是一個全域性的資源管理器,負責整個系統的資源管理和分配,接收來自各個NodeManager的資源彙報資訊,並把這些資訊按照一定的策略分配給各個ApplicationMaster。
    它主要由兩個部分組成:排程器(Scheduler)和應用程式管理器(Application Manager)。

排程器根據容量、佇列等限制條件,將系統中的資源分配給正在執行的應用程式,在保證容量、公平性和服務等級的前提下,優化叢集資源利用率,讓所有的資源都被充分利用 。

應用程式管理器負責管理整個系統中的所有的應用程式,包括應用程式的提交、與排程器協商資源以啟動ApplicationMaster、監控ApplicationMaster執行狀態並在失敗時重啟它。

  • ApplicationMaster
    使用者提交的一個應用程式會對應於一個ApplicationMaster,它的主要功能有:

    • 與RM排程器協商以獲得資源,資源以Container表示。
    • 將得到的任務進一步分配給內部的任務。
    • 與NM通訊以啟動/停止任務。
    • 監控所有的內部任務狀態,並在任務執行失敗的時候重新為任務申請資源以重啟任務。
  • nodeManager
    NodeManager是每個節點上的資源和工作管理員,一方面,它會定期地向RM彙報本節點上的資源使用情況和各個Container的執行狀態;另一方面,他接收並處理來自AM的Container啟動和停止請求。

  • container
    Container是YARN中的資源抽象,封裝了各種資源。一個應用程式會分配一個Container,這個應用程式只能使用這個Container中描述的資源。

不同於MapReduceV1中槽位slot的資源封裝,Container是一個動態資源的劃分單位,更能充分利用資源。

YARN的重要概念

  • yarn並不清楚使用者提交的程式的執行機制

  • yarn只提供運算資源的排程(使用者程式向yarn申請資源,yarn就負責分配資源)

  • yarn中的主管角色叫ResourceManager

  • yarn中具體提供運算資源的角色叫NodeManager

這樣一來,yarn其實就與執行的使用者程式完全解耦,就意味著yarn上可以執行各種型別的分散式運算程式(mapreduce只是其中的一種),比如mapreduce、storm程式,spark程式,tez ……
所以,spark、storm等運算框架都可以整合在yarn上執行,只要他們各自的框架中有符合yarn規範的資源請求機制即可
Yarn就成為一個通用的資源排程平臺,從此,企業中以前存在的各種運算叢集都可以整合在一個物理叢集上,提高資源利用率,方便資料共享

YARN的資源排程流程

當jobclient向YARN提交一個應用程式後,YARN將分兩個階段執行這個應用程式:一是啟動ApplicationMaster;第二個階段是由ApplicationMaster建立應用程式,為它申請資源,監控執行直到結束。

  1. 使用者向YARN 中提交應用程式, 其中包括ApplicationMaster 程式、啟動ApplicationMaster 的命令、使用者程式等。

  2. ResourceManager 為該應用程式分配第一個Container, 並與對應的NodeManager 通訊,要求它在這個Container 中啟動應用程式的ApplicationMaster。

  3. ApplicationMaster 首先向ResourceManager 註冊, 這樣使用者可以直接通過ResourceManage 檢視應用程式的執行狀態,然後它將為各個任務申請資源,並監控它的執行狀態,直到執行結束,即重複步驟4~7。

  4. ApplicationMaster 採用輪詢的方式通過RPC 協議向ResourceManager 申請和領取資源。

  5. 一旦ApplicationMaster 申請到資源後,便與對應的NodeManager 通訊,要求它啟動任務。

  6. NodeManager 為任務設定好執行環境(包括環境變數、JAR 包、二進位制程式等)後,將任務啟動命令寫到一個指令碼中,並通過執行該指令碼啟動任務。

  7. 各個任務通過某個RPC 協議向ApplicationMaster 彙報自己的狀態和進度,以讓ApplicationMaster 隨時掌握各個任務的執行狀態,從而可以在任務失敗時重新啟動任務。在應用程式執行過程中,使用者可隨時通過RPC 向ApplicationMaster 查詢應用程式的當前執行狀態。

  8. 應用程式執行完成後,ApplicationMaster 向ResourceManager 登出並關閉自己。

YARN的資源排程三種模型

在Yarn中有三種排程器可以選擇:FIFO Scheduler ,Capacity Scheduler,Fair Scheduler。

Apache版本的hadoop預設使用的是Capacity Scheduler排程方式。CDH版本的預設使用的是Fair Scheduler排程方式

FIFO Scheduler(先來先服務):

FIFO Scheduler把應用按提交的順序排成一個佇列,這是一個先進先出佇列,在進行資源分配的時候,先給佇列中最頭上的應用進行分配資源,待最頭上的應用需求滿足後再給下一個分配,以此類推。

FIFO Scheduler是最簡單也是最容易理解的排程器,也不需要任何配置,但它並不適用於共享叢集。大的應用可能會佔用所有叢集資源,這就導致其它應用被阻塞,比如有個大任務在執行,佔用了全部的資源,再提交一個小任務,則此小任務會一直被阻塞。

Capacity Scheduler(能力排程器):

對於Capacity排程器,有一個專門的佇列用來執行小任務,但是為小任務專門設定一個佇列會預先佔用一定的叢集資源,這就導致大任務的執行時間會落後於使用FIFO排程器時的時間。

Fair Scheduler(公平排程器):

在Fair排程器中,我們不需要預先佔用一定的系統資源,Fair排程器會為所有執行的job動態的調整系統資源。