Flink on Yarn–Per Job 與 Yarn–Session原理及區別

導讀:Flink集群部署的方式有多種,如Flink Standalone、Flink on Yarn、Flink on Kubernetes等。其中Flink on Yarn又分為Yarn–Per Job模式與Yarn–Session模式。本文主要討論關於Flink on Yarn–Per Job 與 Yarn–Session原理及區別,目錄如下:

  • yarn 架構原理-總覽
  • yarn 架構原理-組件
  • yarn 架構原理-交互
  • Flink on Yarn–Per Job
  • Flink on Yarn–Session

Yarn 架構原理–總覽

首先介紹一下 Yarn 的架構原理,因為只有足夠了解 Yarn 的架構原理,才能更好的知道 Flink 是如何在 Yarn 上運行的。

Flink on Yarn–Per Job 與 Yarn–Session原理及區別

Yarn 的架構原理如上圖所示,最重要的角色是 ResourceManager,主要用來負責整個資源的管理,Client 端是負責向 ResourceManager 提交任務。

用戶在 Client 端提交任務後會先給到 Resource Manager。Resource Manager 會啟動 Container,接著進一步啟動 Application Master,即對 Master 節點的啟動。當 Master 節點啟動之後,會向 Resource Manager 再重新申請資源,當 Resource Manager 將資源分配給 Application Master 之後,Application Master 再將具體的 Task 調度起來去執行。

Yarn 架構原理–組件

Yarn 集群中的組件包括:

  • ResourceManager (RM):ResourceManager (RM)負責處理客戶端請求、啟動/監控 ApplicationMaster、監控 NodeManager、資源的分配與調度,包含 Scheduler 和 Applications Manager。
  • ApplicationMaster (AM):ApplicationMaster (AM)運行在 Slave 上,負責數據切分、申請資源和分配、任務監控和容錯。
  • NodeManager (NM):NodeManager (NM)運行在 Slave 上,用於單節點資源管理、AM/RM通信以及彙報狀態。
  • Container:Container 負責對資源進行抽象,包括內存、CPU、磁盤,網絡等資源。

Yarn 架構原理–交互

Flink on Yarn–Per Job 與 Yarn–Session原理及區別

以在 Yarn 上運行 MapReduce 任務為例來講解下 Yarn 架構的交互原理:

  • 首先,用戶編寫 MapReduce 代碼後,通過 Client 端進行任務提交。
  • ResourceManager 在接收到客戶端的請求後,會分配一個 Container 用來啟動 ApplicationMaster,並通知 NodeManager 在這個 Container 下啟動 ApplicationMaster。
  • ApplicationMaster 啟動後,向 ResourceManager 發起註冊請求。接著 ApplicationMaster 向 ResourceManager 申請資源。根據獲取到的資源,和相關的 NodeManager 通信,要求其啟動程序。
  • 一個或者多個 NodeManager 啟動 Map/Reduce Task。
  • NodeManager 不斷彙報 Map/Reduce Task 狀態和進展給 ApplicationMaster。
  • 當所有 Map/Reduce Task 都完成時,ApplicationMaster 向 ResourceManager 彙報任務完成,並註銷自己。

Flink on Yarn–Per Job

Flink on Yarn–Per Job 與 Yarn–Session原理及區別

Flink on Yarn 中的 Per Job 模式是指每次提交一個任務,然後任務運行完成之後資源就會被釋放。在瞭解了 Yarn 的原理之後,Per Job 的流程也就比較容易理解了,具體如下:

  • 首先 Client 提交 Yarn App,比如 JobGraph 或者 JARs。
  • 接下來 Yarn 的 ResourceManager 會申請第一個 Container。這個 Container 通過 Application Master 啟動進程,Application Master 裡面運行的是 Flink 程序,即 Flink-Yarn ResourceManager 和 JobManager。
  • 最後 Flink-Yarn ResourceManager 向 Yarn ResourceManager 申請資源。當分配到資源後,啟動 TaskManager。TaskManager 啟動後向 Flink-Yarn ResourceManager 進行註冊,註冊成功後 JobManager 就會分配具體的任務給 TaskManager 開始執行。

Flink on Yarn–Session

Flink on Yarn–Per Job 與 Yarn–Session原理及區別

在 Per Job 模式中,執行完任務後整個資源就會釋放,包括 JobManager、TaskManager 都全部退出。而 Session 模式則不一樣,它的 Dispatcher 和 ResourceManager 是可以複用的。Session 模式下,當 Dispatcher 在收到請求之後,會啟動 JobManager(A),讓 JobManager(A) 來完成啟動 TaskManager,接著會啟動 JobManager(B) 和對應的 TaskManager 的運行。當 A、B 任務運行完成後,資源並不會釋放。Session 模式也稱為多線程模式,其特點是資源會一直存在不會釋放,多個 JobManager 共享一個 Dispatcher,而且還共享 Flink-YARN ResourceManager。

Session 模式和 Per Job 模式的應用場景不一樣。Per Job 模式比較適合那種對啟動時間不敏感,運行時間較長的任務。Seesion 模式適合短時間運行的任務,一般是批處理任務。若用 Per Job 模式去運行短時間的任務,那就需要頻繁的申請資源,運行結束後,還需要資源釋放,下次還需再重新申請資源才能運行。顯然,這種任務會頻繁啟停的情況不適用於 Per Job 模式,更適合用 Session 模式。

Yarn 模式特點

Yarn 模式的優點有:

  • 資源的統一管理和調度。Yarn 集群中所有節點的資源(內存、CPU、磁盤、網絡等)被抽象為 Container。計算框架需要資源進行運算任務時需要向 Resource Manager 申請 Container,Yarn 按照特定的策略對資源進行調度和進行 Container 的分配。Yarn 模式能通過多種任務調度策略來利用提高集群資源利用率。例如 FIFO Scheduler、Capacity Scheduler、Fair Scheduler,並能設置任務優先級。
  • 資源隔離。Yarn 使用了輕量級資源隔離機制 Cgroups 進行資源隔離以避免相互干擾,一旦 Container 使用的資源量超過事先定義的上限值,就將其殺死。
  • 自動 failover 處理。例如 Yarn NodeManager 監控、Yarn ApplicationManager 異常恢復。

Yarn 模式雖然有不少優點,但是也有諸多缺點,例如運維部署成本較高,靈活性不夠。

最後

本文內容摘抄於 阿里巴巴技術專周凱波(寶牛)-- Flink on Yarn / K8s 原理剖析及實踐。原文: https://mp.weixin.qq.com/s/sVdI61Un8C8ycArdrwgmTg

感謝您的閱讀,如果喜歡本文歡迎關注和轉發,本頭條號將堅持持續分享IT技術知識。對於文章內容有其他想法或意見建議等,歡迎提出共同討論共同進步


分享到:


相關文章: