YARN機制

YARN是資源管理調度的機制,以前一直以來和MapReduce機制合在一塊兒,以後才分開。正是由於YARN機制單獨獨立出來,才使得Hadoop框架更加具備普適性。MapReduce能夠處理海量離線數據,一樣若是處理實時數據,換成Spark,Storm便可,不用從新部署集羣,由於資源管理調度YARN是共用的。html

當提交一個job,YARN的資源調度以下圖所示:算法

 

YARN有兩個比較重要的組成,Resource Manager和Node Manager,執行hadoop jar cn.darren.hadoop.mr.wordcount.WCRunner這條指令以後,會產生一個RunJar的進程,向RM申請資源,RM會返回job相關資源提交的路徑和本Job產生的ID。進而RunJar提交資源到staging-dir路徑下面,這在HDFS中,提交完向RM彙報提交結果。RM會將本job加入任務隊列,其中RM和NM之間採用「心跳機制」,NM若是以爲本身有空閒,就能夠去RM的任務隊列領取任務。Node Manager接收到分配任務後,會分配運行的資源容器,有點相似於虛擬機,包括文件資源、CPU資源、內存資源等,業務是在裏面跑的。可是YARN並不能啓動MapReduce內部的邏輯,因此這時候會啓動MRAppMaster,這是用來操做MapReduce的,而後它就會向RM進行註冊,好比在哪一個節點運行,什麼標識等等,一樣也會請求一些信息,好比分配的資源都在哪些節點上。而後MRAppMaster就會啓動map任務進程,啓動起來的進程叫作yarnChild,map執行完以後,會啓動Reduce任務進程。MRAppMaster當job執行完後,會向RM註銷本身。(map task和yarn task都叫作yarnChild)網絡

總結一下:框架

在YARN框架中,起監控做用的是Resource Manager,用來監控Node Manager,它們都是節點,也就是進程。oop

在MapReduce框架中,起監控做用的是MRAppMaster,用來監控yarnChild,它們都是動態產生的進程。spa

 

YARN提交job的源碼流程如圖所示:code

最後,將YARN機制的整個運行過程用一張圖做爲總結,能夠看清其總的流程:

 

在yarn中有以下幾個概念:orm

  • ResourceManager
  • NodeManager
  • Secheduler
  • ApplicationManager
  • MRAppMaster
  • Container

ResourceManager和NodeManager對應實體的物理節點,分別映射到yarn的主節點和計算節點。htm

一、ResourceManager

ResourceManager節點的功能由Secheduler和ApplicationManager協調完成。blog

其中ApplicationManager職責以下

  1. 負責接收客戶端提交的job
  2. 判斷啓動該job的MRAppMaster所需的資源
  3. 監控MRAppMaster的狀態,在其失敗的時候重啓MRAppMaster

Secheduler負責僅僅提供一個調度算法調度ApplicationManager提交的任務,他不提供失敗重啓和任何監控功能。調度算法能夠自定義。yarn針對不一樣的場景提供了三種Secheduler實現:FIFO Scheduler ,Capacity scheduler,Fair Scheduler(請參照調度器詳解)。

二、NodeManager

NodeManager對應集羣中的計算節點,可是他的功能僅僅只是抽象本節點的資源(如cpu,內存,磁盤,網絡)而且定時向ResourceManager的Secheduler彙報。

Container是一組資源的集合,一個container通常用來執行一個task。

MRAppMaster是job的生命週期的管理者,負責整個job執行過程的監控。

前面提到ApplicationManager會判斷啓動MRAppMaster所需的資源,以後提交給Secheduler,Secheduler將這些資源封裝成一個Container,而後根據調度算法在某一個NodeManager上啓動MRAppMaster(固然它會消耗掉該NodeManager的資源)。

MRAppMaster啓動以後會計算job所須要的資源,而且向Secheduler申請這些資源,NodeManager分配完成這些任務的container以後,會由MRAppMaster來監控這些container的狀態,若是失敗就回收資源從新申請,若是成功就釋放資源,當任務執行完成以後彙報Secheduler,Secheduler回收資源而且向ResourceManager返回執行結果,整個任務處理完畢。

相關文章
相關標籤/搜索