【Flink、YARN】架構及工作原理

參考:http://lionheartwang.github.io/blog/2018/03/05/flink-framwork-introduction/
https://blog.csdn.net/bingduanlbd/article/details/51880019

Flink 架構

Flink是一個流式計算框架,Flink框架的架構是Master-Slaver風格的,如下圖所示:在這裏插入圖片描述
Flink集羣啓動時,會啓動一個JobManager進程、至少一個TaskManager進程。
在Local模式下,會在同一個JVM內部啓動一個JobManager進程和TaskManager進程。
Flink系統主要包含如下3個主要的進程

  • Client
    當用戶提交一個Flink程序時,Flink框架會首先創建一個Client進程
    該Client首先會對用戶提交的Flink程序進行預處理,並提交到Flink集羣中處理,所以Client需要從用戶提交的Flink程序配置中獲取JobManager的地址,並建立到JobManager的連接,將Flink Job提交給JobManager。
    Client會將用戶提交的Flink程序組裝一個JobGraph, 並且是以JobGraph的形式提交的。
    一個JobGraph是一個Flink Dataflow,它由多個JobVertex組成的DAG。
    其中,一個JobGraph包含了一個Flink程序的如下信息:JobID、Job名稱、配置信息、一組JobVertex等。

  • JobManager
    JobManager是Flink系統的協調者,它負責接收Flink Job,調度組成Job的多個Task的執行。
    同時,JobManager還負責收集Job的狀態信息,並管理Flink集羣中從節點TaskManager
    JobManager負責各項管理功能,它接收到並處理的事件主要包括:

    • RegisterTaskManager:在Flink集羣啓動的時候,TaskManager會向JobManager註冊,如果註冊成功,則JobManager會向TaskManager回覆消息AcknowledgeRegistration。
    • SubmitJobFlink框架內部通過Client向JobManager提交Flink Job,其中在消息SubmitJob中以JobGraph形式描述了Job的基本信息。
    • UpdateTaskExecutionState:TaskManager會向JobManager請求更新ExecutionGraph中的ExecutionVertex的狀態信息,更新成功則返回true。
    • RequestNextInputSplit:運行在TaskManager上面的Task,請求獲取下一個要處理的輸入Split,成功則返回NextInputSplit。
    • JobStatusChanged:ExecutionGraph向JobManager發送該消息,用來表示Flink Job的狀態發生的變化,例如:RUNNING、CANCELING、FINISHED等。
  • TaskManager
    TaskManager也是一個Actor,它是實際負責執行計算的Worker,在其上執行Flink Job的一組Task。
    每個TaskManager負責管理其所在節點上的資源信息,如內存、磁盤、網絡,在啓動的時候將資源的狀態向JobManager彙報。
    TaskManager端可以分成兩個階段:

    1. 註冊階段:TaskManager會向JobManager註冊,發送RegisterTaskManager消息,等待JobManager返回AcknowledgeRegistration,然後TaskManager就可以進行初始化過程。
    2. 可操作階段:該階段TaskManager可以接收並處理與Task有關的消息,如SubmitTask、CancelTask、FailTask。

如果TaskManager無法連接到JobManager,這是TaskManager就失去了與JobManager的聯繫,會自動進入“註冊階段”,只有完成註冊才能繼續處理Task相關的消息。

YARN架構

RM是一個YARN集羣的唯一的全局資源管理器,NM是每個節點上一個的節點資源管理器,每個應用程序對應一個應用管理器AM
YARN(Yet Another Resource Negotiator)是一個通用的資源管理平臺,可爲各類計算框架提供資源的管理和調度。其核心出發點是爲了分離資源管理與作業調度/監控,實現分離的做法是擁有一個全局的資源管理器(ResourceManager,RM),以及每個應用程序對應一個的應用管理器(ApplicationMaster,AM),應用程序由一個作業(Job)或者Job的有向無環圖(DAG)組成。
YARN兩大功能:

  • 資源的統一管理和調度:
    集羣中所有節點的資源(內存、CPU、磁盤、網絡等)抽象爲Container。計算框架需要資源進行運算任務時需要向YARN申請Container, YARN按照特定的策略對資源進行調度進行Container的分配。
  • 資源隔離:
    YARN使用了輕量級資源隔離機制Cgroups進行資源隔離以避免相互干擾,一旦Container使用的資源量超過事先定義的上限值,就將其殺死。

YARN架構如下圖所示:
在這裏插入圖片描述

YARN總體上是Master/Slave結構,主要由ResourceManager、NodeManager、 ApplicationMaster和Container等幾個組件構成。

  • Container
    Container是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等,當AM向RM申請資源時,RM爲AM返回的資源便是用Container 表示的。

  • ResourceManager(RM)
    YARN的一個全局的資源管理器,負責對各NM上的資源進行統一管理和調度。將AM分配空閒的Container運行並監控其運行狀態。對AM申請的資源請求分配相應的空閒Container。主要由兩個組件構成:調度器和應用程序管理器:

    1. 調度器(Scheduler):調度器根據容量、隊列等限制條件(如每個隊列分配一定的資源,最多執行一定數量的作業等),將系統中的資源分配給各個正在運行的應用程序。調度器僅根據各個應用程序的資源需求進行資源分配,而資源分配單位是Container,從而限定每個任務使用的資源量。Shceduler不負責監控或者跟蹤應用程序的狀態,也不負責任務因爲各種原因而需要的重啓(由ApplicationMaster負責)。總之,調度器根據應用程序的資源要求,以及集羣機器的資源情況,爲應用程序分配封裝在Container中的資源。
    2. 應用程序管理器(Applications Manager):應用程序管理器負責管理整個系統中所有應用程序,包括應用程序提交、與調度器協商資源以啓動AM、監控AM運行狀態並在失敗時重新啓動等,跟蹤分給的Container的進度、狀態也是其職責。
  • NodeManager (NM)
    NM是每個計算節點上的一個進程,負責每個節點上的資源和任務管理器。它會定時地向RM彙報本節點上的資源使用情況和各個Container的運行狀態;同時會接收並處理來自AM的Container 啓動/停止等請求

  • ApplicationMaster (AM)
    用戶提交的應用程序均包含一個AM,負責應用的監控,跟蹤應用執行狀態,重啓失敗任務等。ApplicationMaster是應用框架,它負責向ResourceManager協調資源,並且與NodeManager協同工作完成Task的執行和監控。

YARN應用工作流程(如下圖所示):
RM爲應用程序分配第一個Container,並與對應的NM通信,要求它在這個Container中啓動AM;AM首先向RM註冊,然後它將爲各個任務申請資源;—旦AM申請到資源後,便與對應的NM通信,要求它啓動任務;NM爲任務設置好運行環境(包括環境變量、JAR包、二進制程序等)後,將任務啓動命令寫到一個腳本中,並通過運行該腳本啓動任務;
在這裏插入圖片描述

YARN可以看成一個雲操作系統,由一個ResourceManager和多個NodeManager組成, YARN負責管理所有NodeManger上多維度資源, 並以Container(啓動一個Container相當於啓動一個進程)方式分配給應用程序啓動ApplicationMaster(相當於主進程中運行邏輯) 或運行ApplicationMaster切分的各Task(相當於子進程中運行邏輯)。

Flink on YARN

Flink on YARN的部署模式,如下圖所示:
在這裏插入圖片描述
Flink實現了滿足在YARN集羣上運行的各個組件:

  • Flink YARN Client負責與YARN RM通信協商資源請求
  • Flink JobManager和Flink TaskManager分別申請到Container去運行各自的進程。

通過上圖可以看到,YARN AM與Flink JobManager在同一個Container中,這樣AM可以知道Flink JobManager的地址,從而AM可以申請Container去啓動Flink TaskManager。
待Flink成功運行在YARN集羣上,Flink YARN Client就可以提交Flink Job到Flink JobManager,並進行後續的映射、調度和計算處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章