yarn即MapReduce 2.0 。相比MR 1.0,yarn架構中的各個角色職責單一,分工明確,在性能,穩定性上有所提升。
在yarn中有如下幾個概念:
- ResourceManager
- NodeManager
- Secheduler
- ApplicationManager
- ApplicationMaster
- Container
ResourceManager和NodeManager對應實體的物理節點,分別映射到yarn的主節點和計算節點。
1、ResourceManager
ResourceManager節點的功能由Secheduler和ApplicationManager協調完成。
其中ApplicationManager職責如下
- 負責接收客戶端提交的job
- 判斷啟動該job的ApplicationMaster所需的資源
- 監控ApplicationMaster的狀態,在其失敗的時候重啟ApplicationMaster
Secheduler負責僅僅提供一個調度算法調度ApplicationManager提交的任務,他不提供失敗重啟和任何監控功能。調度算法可以自定義。yarn針對不同的場景提供了三種Secheduler實現:FIFO Scheduler ,Capacity scheduler,Fair Scheduler(請參照調度器詳解)。
2、NodeManager
NodeManager對應集群中的計算節點,但是他的功能僅僅只是抽象本節點的資源(如cpu,內存,磁盤,網絡)并且定時向ResourceManager的Secheduler匯報。
Container是一組資源的集合,一個container一般用來執行一個task。
ApplicationMaster是job的生命周期的管理者,負責整個job執行過程的監控。
前面提到ApplicationManager會判斷啟動ApplicationMaster所需的資源,之后提交給Secheduler,Secheduler將這些資源封裝成一個Container,然后根據調度算法在某一個NodeManager上啟動ApplicationMaster(當然它會消耗掉該NodeManager的資源)。
ApplicationMaster啟動之后會計算job所需要的資源,并且向Secheduler申請這些資源,NodeManager分配完成這些任務的container之后,會由ApplicationMaster來監控這些container的狀態,如果失敗就回收資源重新申請,如果成功就釋放資源,當任務執行完成之后匯報Secheduler,Secheduler回收資源并且向ResourceManager返回執行結果,整個任務處理完畢。