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