1.開(kāi)發(fā)者模式
? ??在idea中運(yùn)行Flink程序的方式就是開(kāi)發(fā)模式。
2.local-cluster模式
? ??Flink中的Local-cluster(本地集群)模式,單節(jié)點(diǎn)運(yùn)行凶硅,主要用于測(cè)試, 學(xué)習(xí)。
3.Standalone模式
????????獨(dú)立集群模式撤摸,由Flink自身提供計(jì)算資源赖淤。
4.Yarn模式
把Flink應(yīng)用提交給Yarn的ResourceManager
Flink會(huì)根據(jù)運(yùn)行在JobManger上的job的需要的slot的數(shù)量動(dòng)態(tài)的分配TaskManager資源
Yarn又分3種模式
4.1Session-Cluster
Session-Cluster模式需要先啟動(dòng)Flink集群,向Yarn申請(qǐng)資源涩馆。以后提交任務(wù)都向這里提交提陶。
這個(gè)Flink集群會(huì)常駐在yarn集群中烫沙,除非手工停止。
在向Flink集群提交Job的時(shí)候, 如果資源被用完了,則新的Job不能正常提交.
缺點(diǎn): 如果提交的作業(yè)中有長(zhǎng)時(shí)間執(zhí)行的大作業(yè), 占用了該Flink集群的所有資源, 則后續(xù)無(wú)法提交新的job.
所以, Session-Cluster適合那些需要頻繁提交的多個(gè)小Job, 并且執(zhí)行時(shí)間都不長(zhǎng)的Job.
4.2Per-Job-Cluster
一個(gè)Job會(huì)對(duì)應(yīng)一個(gè)Flink集群隙笆,每提交一個(gè)作業(yè)會(huì)根據(jù)自身的情況锌蓄,都會(huì)單獨(dú)向yarn申請(qǐng)資源,直到作業(yè)執(zhí)行完成撑柔,一個(gè)作業(yè)的失敗與否并不會(huì)影響下一個(gè)作業(yè)的正常提交和運(yùn)行瘸爽。獨(dú)享Dispatcher和ResourceManager,按需接受資源申請(qǐng)铅忿;適合規(guī)模大長(zhǎng)時(shí)間運(yùn)行的作業(yè)剪决。
每次提交都會(huì)創(chuàng)建一個(gè)新的flink集群,任務(wù)之間互相獨(dú)立檀训,互不影響柑潦,方便管理。任務(wù)執(zhí)行完成之后創(chuàng)建的集群也會(huì)消失肢扯。
Per-job模式執(zhí)行結(jié)果妒茬,一個(gè)job對(duì)應(yīng)一個(gè)Application
4.3Application Mode
Application Mode會(huì)在Yarn上啟動(dòng)集群, 應(yīng)用jar包的main函數(shù)(用戶類的main函數(shù))將會(huì)在JobManager上執(zhí)行. 只要應(yīng)用程序執(zhí)行結(jié)束, Flink集群會(huì)馬上被關(guān)閉. 也可以手動(dòng)停止集群.
與Per-Job-Cluster的區(qū)別:就是Application Mode下, 用戶的main函數(shù)式在集群中執(zhí)行的,并且當(dāng)一個(gè)application中有多個(gè)job的話蔚晨,per-job模式則是一個(gè)job對(duì)應(yīng)一個(gè)yarn中的application,而Application Mode則這個(gè)application中對(duì)應(yīng)多個(gè)job。
Application Mode模式執(zhí)行結(jié)果铭腕,多個(gè)job對(duì)應(yīng)一個(gè)Application
官方建議:
出于生產(chǎn)的需求, 我們建議使用Per-job or Application Mode,因?yàn)樗麄兘o應(yīng)用提供了更好的隔離!
https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/
yarn-cluster提交流程
0.Flink任務(wù)提交后银择,Client向HDFS上傳Flink的Jar包和配置
1.向Yarn ResourceManager提交任務(wù),ResourceManager分配Container資源
2.通知對(duì)應(yīng)的NodeManager啟動(dòng)ApplicationMaster累舷,ApplicationMaster啟動(dòng)后加載Flink的Jar包和配置構(gòu)建環(huán)境浩考,然后啟動(dòng)JobManager(Dispatcher)
2.1.Dispatcher啟動(dòng)JobMaster
3.JobMaster向ResourceManager(Flink)申請(qǐng)資源
4.ResourceManager(Flink)向ResourceManager(Yarn)申請(qǐng)資源啟動(dòng)TaskManager
5.ResourceManager分配Container資源后,由ApplicationMaster通知資源所在節(jié)點(diǎn)的NodeManager啟動(dòng)TaskManager
6.TaskManager注冊(cè)Slot
7.發(fā)出提供Slot命令
8.TaskManager向JobMaster提供Slot
9.JobMaster提交要在Slot中執(zhí)行的任務(wù)