1..運(yùn)行時架構(gòu)
在Flink進(jìn)行數(shù)據(jù)處理的時候,有兩個最重要的兩個組件,分別是:作業(yè)管理器(JobManager)和任務(wù)管理器(TaskManager)和泌。對于一個提交執(zhí)行的作業(yè)畔柔,JM是真正的管理者,負(fù)責(zé)管理和調(diào)度工作清寇。如果集群沒有配置高可用的話,只能有一個JM。TM是負(fù)責(zé)工作的工作者硕旗,負(fù)責(zé)執(zhí)行任務(wù)和處理數(shù)據(jù),所以可以有很多個女责。
1.1 JobManager
整個JM由三個部分組成漆枚,分別是JobMaster、ResourceManager抵知、Dispatcher墙基。
1.1.1 JobMaster
JMaster是JManager中最核心的組件,負(fù)責(zé)處理單獨(dú)的作業(yè)刷喜。所以每一個Job都會有一個對應(yīng)JobMaster與之對應(yīng)残制,多個job可以同時運(yùn)行在一個FLink集群中,也就證明一個Flink集群中可以有多個JobMaster同時存在掖疮。在作業(yè)被提交的時候初茶,JMaster會率先接受到要執(zhí)行的應(yīng)用。這些應(yīng)用包括:Jar包浊闪、數(shù)據(jù)流圖(dataflow graph)恼布、作業(yè)圖(JobGraph)。然后將接收到的作業(yè)圖轉(zhuǎn)換成為一個物理層面的數(shù)據(jù)流圖搁宾,也就是執(zhí)行圖折汞,這個執(zhí)行圖包含了所有要并發(fā)執(zhí)行的任務(wù)。隨后JMaster會根據(jù)這個執(zhí)行圖去到RM中申請必要的資源猛铅。一旦獲得到了足夠的資源字支,就會將執(zhí)行圖發(fā)送到要運(yùn)行執(zhí)行圖的TaskMaster上面。并且在程序運(yùn)行的過程中,JobMaster會負(fù)責(zé)協(xié)調(diào)所有的需要中央?yún)f(xié)調(diào)的工作堕伪,如保存點(diǎn)機(jī)制揖庄。
1.1.2ResourceManager
RM在Flink的集群中只有一個,它主要負(fù)責(zé)的是資源的分配與管理欠雌,也就是對TaskManager上的solt的分配工作蹄梢。并且在面對不同的環(huán)境的時候,RM也有不同的體現(xiàn)富俄。如果是standalone禁炒,因?yàn)門M是獨(dú)立運(yùn)行的,所有RM只能分發(fā)可用的TM的任務(wù)槽霍比,沒辦法單獨(dú)啟動TM幕袱。但是如果是yarn的工作模式下,RM能夠?qū)⒂锌臻e的TM發(fā)送給JMaster悠瞬,如果資源不夠使用的話们豌,就會向yarn發(fā)起請求提供啟動TM的容器。并且如果有的TM處于空閑狀態(tài)浅妆,RM還負(fù)責(zé)停止它們的工作望迎。
1.1.3 Dispatcher
它主要負(fù)責(zé)提供Rest風(fēng)格的接口來提交應(yīng)用。并且還負(fù)責(zé)為每一個新提交的作業(yè)啟動一個新的JMaster組件凌外,并且還會啟動一個WEB UI辩尊,方便用來展示和鍵控作業(yè)執(zhí)行的信息。
1.2 TaskManager
TM負(fù)責(zé)FLink集群中的具體工作部分康辑,數(shù)據(jù)流的計算就是由這個組件來完成的摄欲,每一個TM都會有一定數(shù)量的任務(wù)槽,這個任務(wù)槽是一個TM上最小的資源封裝單位晾捏,solt的數(shù)量決定了TM能夠并行處理的任務(wù)的數(shù)量蒿涎。在TM啟動之后,會向RM注冊自己的solt惦辛,當(dāng)收到RM對其發(fā)送的指令之后劳秋,就會根據(jù)要求發(fā)送能夠提供計算的solt給JMaster調(diào)用,這樣數(shù)據(jù)計算就能夠?qū)崿F(xiàn)了胖齐,并且在進(jìn)行計算的過程中玻淑,TaskManager可以緩沖數(shù)據(jù),還能夠與其他的TM交互完成數(shù)據(jù)的交換呀伙。
2.作業(yè)提交流程(yarn)
因?yàn)槲冶救怂佑|的Flink的部署模式都是基于資源管理平臺yarn來實(shí)現(xiàn)工作的补履,采用的作業(yè)提交方式也是通過per-job提交方式進(jìn)行提交的,所以在本次講述的過程中剿另,也是以這個內(nèi)容為藍(lán)本展開講解箫锤。
yarn-per-job作業(yè)提交流程:
在單作業(yè)模式下贬蛙,F(xiàn)link集群不會預(yù)先啟動,而是在進(jìn)行作業(yè)提交的時候谚攒,才會啟動新的JobManager阳准。
1.客戶端向yarn提交作業(yè),并且需要將Flink的Jar包和配置文件信息上傳到HDFS馏臭,以便后續(xù)啟動FLink相關(guān)組件的容器野蝇。
2.YARN資源管理器分配Container資源,啟動Application Master括儒,這個APP里面包含了Flink的JobManager绕沈,并且要將提交上來的作業(yè)交給JMaster。
3.JMaster向flink的rm請求資源帮寻。
4.flink的rm向yarn請求container資源乍狐。
5.yarn啟動包含TM的container資源。
6.TM向JMaster注冊自己擁有的solt數(shù)量固逗。
7.flink的RM向TM申請solt澜躺。
8.TM連接到對應(yīng)的JMaster,然后通過solt抒蚜。
9.JMaster將要執(zhí)行的任務(wù)分發(fā)給TM,執(zhí)行耘戚。