Flink on YARN的第三種部署模式:Application Mode

前言

長(zhǎng)久以來(lái),在YARN集群中部署Flink作業(yè)有兩種模式,即Session Mode和Per-Job Mode,而在Flink 1.11版本中,又引入了第三種全新的模式:Application Mode爷速。本文先回顧兩種傳統(tǒng)模式的做法與存在的問(wèn)題,再簡(jiǎn)要介紹Application Mode霞怀。

傳統(tǒng)部署模式

Session模式

Session模式是預(yù)分配資源的遍希,也就是提前根據(jù)指定的資源參數(shù)初始化一個(gè)Flink集群,并常駐在YARN系統(tǒng)中里烦,擁有固定數(shù)量的JobManager和TaskManager(注意JobManager只有一個(gè))凿蒜。提交到這個(gè)集群的作業(yè)可以直接運(yùn)行,免去每次分配資源的overhead胁黑。但是Session的資源總量有限废封,多個(gè)作業(yè)之間又不是隔離的,故可能會(huì)造成資源的爭(zhēng)用丧蘸;如果有一個(gè)TaskManager宕機(jī)漂洋,它上面承載著的所有作業(yè)也都會(huì)失敗。另外力喷,啟動(dòng)的作業(yè)越多刽漂,JobManager的負(fù)載也就越大。所以弟孟,Session模式一般用來(lái)部署那些對(duì)延遲非常敏感但運(yùn)行時(shí)長(zhǎng)較短的作業(yè)贝咙。

Per-Job模式

顧名思義,在Per-Job模式下拂募,每個(gè)提交到Y(jié)ARN上的作業(yè)會(huì)各自形成單獨(dú)的Flink集群庭猩,擁有專(zhuān)屬的JobManager和TaskManager窟她。可見(jiàn)蔼水,以Per-Job模式提交作業(yè)的啟動(dòng)延遲可能會(huì)較高震糖,但是作業(yè)之間的資源完全隔離,一個(gè)作業(yè)的TaskManager失敗不會(huì)影響其他作業(yè)的運(yùn)行趴腋,JobManager的負(fù)載也是分散開(kāi)來(lái)的吊说,不存在單點(diǎn)問(wèn)題。當(dāng)作業(yè)運(yùn)行完成优炬,與它關(guān)聯(lián)的集群也就被銷(xiāo)毀颁井,資源被釋放。所以穿剖,Per-Job模式一般用來(lái)部署那些長(zhǎng)時(shí)間運(yùn)行的作業(yè)蚤蔓。

存在的問(wèn)題

上文所述Session模式和Per-Job模式可以用如下的簡(jiǎn)圖表示卦溢,其中紅色糊余、藍(lán)色和綠色的圖形代表不同的作業(yè)。

Deployer代表向YARN集群發(fā)起部署請(qǐng)求的節(jié)點(diǎn)单寂,一般來(lái)講在生產(chǎn)環(huán)境中贬芥,也總有這樣一個(gè)節(jié)點(diǎn)作為所有作業(yè)的提交入口(即客戶端)。在main()方法開(kāi)始執(zhí)行直到env.execute()方法之前宣决,客戶端也需要做一些工作蘸劈,即:

  • 獲取作業(yè)所需的依賴(lài)項(xiàng);
  • 通過(guò)執(zhí)行環(huán)境分析并取得邏輯計(jì)劃尊沸,即StreamGraph→JobGraph威沫;
  • 將依賴(lài)項(xiàng)和JobGraph上傳到集群中。

只有在這些都完成之后洼专,才會(huì)通過(guò)env.execute()方法觸發(fā)Flink運(yùn)行時(shí)真正地開(kāi)始執(zhí)行作業(yè)棒掠。試想,如果所有用戶都在Deployer上提交作業(yè)屁商,較大的依賴(lài)會(huì)消耗更多的帶寬烟很,而較復(fù)雜的作業(yè)邏輯翻譯成JobGraph也需要吃掉更多的CPU和內(nèi)存,客戶端的資源反而會(huì)成為瓶頸——不管Session還是Per-Job模式都存在此問(wèn)題蜡镶。為了解決它雾袱,社區(qū)在傳統(tǒng)部署模式的基礎(chǔ)上實(shí)現(xiàn)了Application模式。

Application模式

此模式下的作業(yè)提交框圖如下官还。

可見(jiàn)芹橡,原本需要客戶端做的三件事被轉(zhuǎn)移到了JobManager里,也就是說(shuō)main()方法在集群中執(zhí)行(入口點(diǎn)位于ApplicationClusterEntryPoint)望伦,Deployer只需要負(fù)責(zé)發(fā)起部署請(qǐng)求了僻族。另外粘驰,如果一個(gè)main()方法中有多個(gè)env.execute()/executeAsync()調(diào)用,在Application模式下述么,這些作業(yè)會(huì)被視為屬于同一個(gè)應(yīng)用蝌数,在同一個(gè)集群中執(zhí)行(如果在Per-Job模式下,就會(huì)啟動(dòng)多個(gè)集群)度秘《ド。可見(jiàn),Application模式本質(zhì)上是Session和Per-Job模式的折衷剑梳。

用Application模式提交作業(yè)的示例命令如下唆貌。

bin/flink run-application -t yarn-application \
-Djobmanager.memory.process.size=2048m \
-Dtaskmanager.memory.process.size=4096m \
-Dtaskmanager.numberOfTaskSlots=2 \
-Dparallelism.default=10 \
-Dyarn.application.name="MyFlinkApp" \
/path/to/my/flink-app/MyFlinkApp.jar

-t參數(shù)用來(lái)指定部署目標(biāo),目前支持YARN(yarn-application)和K8S(kubernetes-application)垢乙。-D參數(shù)則用來(lái)指定與作業(yè)相關(guān)的各項(xiàng)參數(shù)锨咙,具體可參見(jiàn)官方文檔

那么如何解決傳輸依賴(lài)項(xiàng)造成的帶寬占用問(wèn)題呢追逮?Flink作業(yè)必須的依賴(lài)是發(fā)行包flink-dist.jar酪刀,還有擴(kuò)展庫(kù)(位于$FLINK_HOME/lib)和插件庫(kù)(位于$FLINK_HOME/plugin),我們將它們預(yù)先上傳到像HDFS這樣的共享存儲(chǔ)钮孵,再通過(guò)yarn.provided.lib.dirs參數(shù)指定存儲(chǔ)的路徑即可骂倘。

-Dyarn.provided.lib.dirs="hdfs://myhdfs/flink-common-deps/lib;hdfs://myhdfs/flink-common-deps/plugins"

這樣所有作業(yè)就不必各自上傳依賴(lài),可以直接從HDFS拉取巴席,并且YARN NodeManager也會(huì)緩存這些依賴(lài)历涝,進(jìn)一步加快作業(yè)的提交過(guò)程。同理漾唉,包含F(xiàn)link作業(yè)的用戶JAR包也可以上傳到HDFS荧库,并指定遠(yuǎn)程路徑進(jìn)行提交。

The End

明天早起搬磚赵刑,民那晚安晚安分衫。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市料睛,隨后出現(xiàn)的幾起案子丐箩,更是在濱河造成了極大的恐慌,老刑警劉巖恤煞,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屎勘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡居扒,警方通過(guò)查閱死者的電腦和手機(jī)概漱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)喜喂,“玉大人瓤摧,你說(shuō)我怎么就攤上這事竿裂。” “怎么了照弥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵腻异,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我这揣,道長(zhǎng)悔常,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任给赞,我火速辦了婚禮机打,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘片迅。我一直安慰自己残邀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布柑蛇。 她就那樣靜靜地躺著芥挣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唯蝶。 梳的紋絲不亂的頭發(fā)上九秀,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天遗嗽,我揣著相機(jī)與錄音粘我,去河邊找鬼。 笑死痹换,一個(gè)胖子當(dāng)著我的面吹牛征字,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播娇豫,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼匙姜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了冯痢?” 一聲冷哼從身側(cè)響起氮昧,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浦楣,沒(méi)想到半個(gè)月后袖肥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡振劳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年椎组,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片历恐。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寸癌,死狀恐怖专筷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蒸苇,我是刑警寧澤磷蛹,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站溪烤,受9級(jí)特大地震影響弦聂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜氛什,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一莺葫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧枪眉,春花似錦捺檬、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蒿秦,卻和暖如春烤镐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背棍鳖。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工炮叶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人渡处。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓镜悉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親医瘫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侣肄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355