flink运行原理_Flink运行架构剖析
Flink Runtime作業執行流程分析
整體架構圖
Flink Runtime 層的主要架構如下圖所示,它展示了一個 Flink 集群的基本結構。整體來說,它采用了標準 master-slave 的結構,master負責管理整個集群中的資源和作業;TaskExecutor 則是 Slave,負責提供具體的資源并實際執行作業。執行流程分析
組件介紹
流程分析
1.當用戶提交作業的時候,提交腳本會首先啟動一個 Client進程負責作業的編譯與提交。它首先將用戶編寫的代碼編譯為一個 JobGraph,在這個過程,它還會進行一些檢查或優化等工作,例如判斷哪些 Operator 可以 Chain 到同一個 Task 中。然后,Client 將產生的 JobGraph 提交到集群中執行。此時有兩種情況,一種是類似于 Standalone 這種 Session 模式,AM 會預先啟動,此時 Client 直接與 Dispatcher 建立連接并提交作業即可。另一種是 Per-Job 模式,AM 不會預先啟動,此時 Client 將首先向資源管理系統 (如Yarn、K8S)申請資源來啟動 AM,然后再向 AM 中的 Dispatcher 提交作業。
2.當作業到 Dispatcher 后,Dispatcher 會首先啟動一個 JobManager 組件,然后 JobManager 會向 ResourceManager 申請資源來啟動作業中具體的任務。如果是Session模式,則TaskManager已經啟動了,就可以直接分配資源。如果是per-Job模式,ResourceManager 也需要首先向外部資源管理系統申請資源來啟動 TaskExecutor,然后等待 TaskExecutor 注冊相應資源后再繼續選擇空閑資源進程分配,JobManager 收到 TaskExecutor 注冊上來的 Slot 后,就可以實際提交 Task 了。
3.TaskExecutor 收到 JobManager 提交的 Task 之后,會啟動一個新的線程來執行該 Task。Task 啟動后就會開始進行預先指定的計算,并通過數據 Shuffle 模塊互相交換數據。
Flink Standalone運行架構
Flink Standalone運行架構如下圖所示:
Standalone模式需要先啟動Jobmanager和TaskManager進程,每一個作業都是自己的JobManager。 Client:任務提交,生成JobGraph
JobManager:調度Job,協調Task,通信,申請資源
TaskManager:具體任務執行,請求資源
Flink On YARN運行架構
關于YARN的基本架構原理,詳見另一篇我的另一篇文章YARN架構原理
Per-Job模式
Per-job 模式下整個 Flink 集群只執行單個作業,即每個作業會獨享 Dispatcher 和 ResourceManager 組件。此外,Per-job 模式下 AppMaster 和 TaskExecutor 都是按需申請的。因此,Per-job 模式更適合運行執行時間較長的大作業,這些作業對穩定性要求較高,并且對申請資源的時間不敏感。
1.獨享Dispatcher與ResourceManager
2.按需申請資源(TaskExecutor)
3.適合執行時間較長的大作業
Session模式
在 Session 模式下,Flink 預先啟動 AppMaster 以及一組 TaskExecutor,然后在整個集群的生命周期中會執行多個作業。可以看出,Session 模式更適合規模小,執行時間短的作業。
1.共享Dispatcher與ResourceManager
2.共享資源
3.適合小規模,執行時間較短的作業
總結
以上是生活随笔為你收集整理的flink运行原理_Flink运行架构剖析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 壁纸:换一张自己喜欢的手机壁纸
- 下一篇: Win10技巧:16个系统优化设置小技巧