Flink 任務(wù)和調(diào)度

Flink是如何調(diào)度Job的,以及如何在JobManager上表現(xiàn)并跟蹤Job狀態(tài)

調(diào)度

Flink 通過任務(wù)槽(Task slot)定義執(zhí)行資源实苞,每個 TaskManager 都有一或多個任務(wù)槽,每個任務(wù)槽都可以運行一個并行任務(wù)流州藕,一個 pipeline 包括多個連續(xù)的任務(wù),例如一個 MapFunction 的第n個并行實例與一個 ReduceFunction 的第n個并行實例的連續(xù)任務(wù)。Flink 通常會并發(fā)執(zhí)行連續(xù)的任務(wù)涛癌,對于流式程序來說,任何情況都如此執(zhí)行送火;而對于批處理程序拳话,多數(shù)情況也如此執(zhí)行。

參照下圖說明种吸,由一個 Data source弃衍、一個 MapFunction 和一個 ReduceFunction 組成的程序,Data source 和 MapFunction 的并發(fā)度都為4骨稿,而 ReduceFunction 的并發(fā)度為3笨鸡。一個 pipeline 由 Source-Map-Reduce 組成姜钳,在具有2個 TaskManager坦冠,每個 TaskManager 有3個 Task slot 的集群上運行,程序執(zhí)行情況下:

slots

說明如下:

  • TaskManager 1上哥桥,有2個并行的 ExecutionVertex 組成的DAG圖辙浑,各占用一個 Task slot
  • TaskManager 2上,有2個并行的 ExecutionVertex 組成的 DAG 圖拟糕,各占用一個Task Slot
  • 在2個 TaskManager 上運行的4個 Execution 是并行執(zhí)行的

Flink 內(nèi)通過 SlotSharingGroup 和 CoLocationGroup 來定義哪些任務(wù)共享一個 Task slot判呕,哪些任務(wù)必須嚴格的放到一個 Task slot中倦踢。

JobManager數(shù)據(jù)結(jié)構(gòu)

作業(yè)執(zhí)行期間,JobManager 會持續(xù)跟蹤分布式任務(wù)侠草,決定什么時候調(diào)度下一個 Task(或者一組任務(wù))辱挥,并且對已完成的或執(zhí)行失敗的任務(wù)進行響應(yīng)。

JobManager 接收 JobGraph边涕,JobGraph 是數(shù)據(jù)流的表現(xiàn)形式晤碘,包括算子(JobVertex)和中間結(jié)果(IntermediateDataSet)。每個算子都有諸如并行度和執(zhí)行代碼等屬性功蜓。此外园爷,JobGraph 還擁有一些在算子執(zhí)行代碼時所需要的附加庫。

JobManager 將 JobGraph 轉(zhuǎn)換為 ExecutionGraph式撼,ExecutionGraph 是 JobGraph 的并行版本:對每個 JobVertex童社,包含并行子任務(wù)的 ExecutionVertex。一個并行度為100的算子將擁有一個 JobVertex 和100個 ExecutionVertex著隆。ExecutionVertex 會跟蹤特定子任務(wù)的執(zhí)行狀態(tài)扰楼。來自一個 JobVertex 的所有 ExecutionVertex 都由一個 ExecutionJobVertex 管理保存,ExecutionJobVertex 跟蹤算子整體狀態(tài)旅东。除了各個節(jié)點之外灭抑,ExecutionGraph 同樣包括了 IntermediateResult 和 IntermediateResultPartition,前者跟蹤 IntermediateDataSet 的狀態(tài)抵代,后者跟蹤每個分區(qū)的狀態(tài)腾节。

graph

每個 ExecutionGraph 都有一個與其相關(guān)聯(lián)的作業(yè)狀態(tài)。此作業(yè)狀態(tài)指示作業(yè)執(zhí)行的當前狀態(tài)荤牍。

作業(yè)首先處于創(chuàng)建狀態(tài)(created)案腺,然后切換到運行狀態(tài)(running),并且在完成所有工作后康吵,它將切換到完成狀態(tài)(finished)劈榨。在失敗的情況下,作業(yè)首先切換到失敗狀態(tài)(failing)晦嵌,取消所有正在運行任務(wù)同辣。如果所有節(jié)點都已達到最終狀態(tài),并且作業(yè)不可重新啟動惭载,則狀態(tài)將轉(zhuǎn)換為失敽岛(failed)。如果作業(yè)可以重新啟動描滔,那么它將進入重新啟動狀態(tài)(restarting)棒妨。一旦完成重新啟動,它將變成創(chuàng)建狀態(tài)(created)含长。

在用戶取消作業(yè)的情況下券腔,將進入取消狀態(tài)(cancelling)伏穆,會取消所有當前正在運行的任務(wù)。一旦所有運行的任務(wù)已經(jīng)達到最終狀態(tài)纷纫,該作業(yè)將轉(zhuǎn)換到已取消狀態(tài)(canceled)枕扫。

完成狀態(tài)(finished),取消狀態(tài)(canceled)和失敗狀態(tài)(failed)表示一個全局的終結(jié)狀態(tài)辱魁,并且觸發(fā)清理工作铡原,而暫停狀態(tài)(suspended)僅處于本地終止狀態(tài)。意味著作業(yè)的執(zhí)行在相應(yīng)的 JobManager 上終止商叹,但集群的另一個 JobManager 可以從持久的HA存儲中恢復(fù)這個作業(yè)并重新啟動燕刻。因此,處于暫停狀態(tài)的作業(yè)將不會被完全清理剖笙。

Job status

在執(zhí)行 ExecutionGraph 期間卵洗,每個并行任務(wù)經(jīng)過多個階段,從創(chuàng)建(created)到完成(finished)或失斆诌洹(failed) 过蹂,下圖說明了它們之間的狀態(tài)和可能的轉(zhuǎn)換。任務(wù)可以執(zhí)行多次(例如故障恢復(fù))聚至。每個 Execution 跟蹤一個 ExecutionVertex 的執(zhí)行酷勺,每個 ExecutionVertex 都有一個當前 Execution(current execution)和一個前驅(qū) Execution(prior execution)。

status

補充:Flink 執(zhí)行圖

在 Flink 中的執(zhí)行圖可以分為四層:StreamGraph -> JobGraph -> ExecutionGraph -> 物理執(zhí)行圖

  • StreamGraph:Stream API 編寫的代碼生成的最初的圖扳躬。用來表示程序的拓撲結(jié)構(gòu)脆诉。可以調(diào)用 env.getExecutionPlan() 輸出json串贷币,將該 JSON 串粘貼到 http://flink.apache.org/visualizer/ 可視化該執(zhí)行圖击胜。
  • JobGraph:StreamGraph 經(jīng)過優(yōu)化后生成了 JobGraph,提交給 JobManager 的數(shù)據(jù)結(jié)構(gòu)役纹。主要的優(yōu)化為偶摔,將多個符合條件的節(jié)點 chain 在一起作為一個節(jié)點,這樣可以減少數(shù)據(jù)在節(jié)點之間流動所需要的序列化/反序列化/傳輸消耗促脉。
  • ExecutionGraph:JobManager 根據(jù) JobGraph 生成 ExecutionGraph辰斋。ExecutionGraph 是 JobGraph 的并行化版本,是調(diào)度層最核心的數(shù)據(jù)結(jié)構(gòu)瘸味。
  • 物理執(zhí)行圖:JobManager 根據(jù) ExecutionGraph 對 Job 進行調(diào)度后宫仗,在各個TaskManager 上部署 Task 后形成的“圖”,并不是一個具體的數(shù)據(jù)結(jié)構(gòu)硫戈。

四層執(zhí)行圖的演變過程如下圖所示(來源:Flink 原理與實現(xiàn):架構(gòu)和拓撲概覽):


Reference
https://ci.apache.org/projects/flink/flink-docs-release-1.6/internals/job_scheduling.html
http://wuchong.me/blog/2016/05/03/flink-internals-overview/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锰什,一起剝皮案震驚了整個濱河市下硕,隨后出現(xiàn)的幾起案子丁逝,更是在濱河造成了極大的恐慌汁胆,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霜幼,死亡現(xiàn)場離奇詭異嫩码,居然都是意外死亡,警方通過查閱死者的電腦和手機罪既,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門铸题,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人琢感,你說我怎么就攤上這事丢间。” “怎么了驹针?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵烘挫,是天一觀的道長。 經(jīng)常有香客問我柬甥,道長饮六,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任苛蒲,我火速辦了婚禮卤橄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘臂外。我一直安慰自己窟扑,他們只是感情好,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布漏健。 她就那樣靜靜地躺著辜膝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漾肮。 梳的紋絲不亂的頭發(fā)上厂抖,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天,我揣著相機與錄音克懊,去河邊找鬼忱辅。 笑死,一個胖子當著我的面吹牛谭溉,可吹牛的內(nèi)容都是我干的墙懂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼扮念,長吁一口氣:“原來是場噩夢啊……” “哼损搬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤巧勤,失蹤者是張志新(化名)和其女友劉穎嵌灰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颅悉,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡沽瞭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了剩瓶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驹溃。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖延曙,靈堂內(nèi)的尸體忽然破棺而出豌鹤,到底是詐尸還是另有隱情,我是刑警寧澤枝缔,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布傍药,位于F島的核電站,受9級特大地震影響魂仍,放射性物質(zhì)發(fā)生泄漏拐辽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一擦酌、第九天 我趴在偏房一處隱蔽的房頂上張望俱诸。 院中可真熱鬧,春花似錦赊舶、人聲如沸睁搭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽园骆。三九已至,卻和暖如春寓调,著一層夾襖步出監(jiān)牢的瞬間锌唾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工夺英, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晌涕,地道東北人。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓痛悯,卻偏偏與公主長得像余黎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子载萌,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 原文鏈接 對于單節(jié)點設(shè)置惧财,F(xiàn)link已經(jīng)準備就緒巡扇,不需要更改默認配置就可以啟動。 開箱即用的配置會使用你默認安裝的...
    小C菜鳥閱讀 7,627評論 0 0
  • 簡單之美 | Apache Flink:特性描姚、概念、組件棧戈次、架構(gòu)及原理分析http://shiyanjun.cn/...
    葡萄喃喃囈語閱讀 7,419評論 0 27
  • apache Flink是一個面向分布式數(shù)據(jù)流處理和批量數(shù)據(jù)處理的開源計算平臺轩勘,它能夠基于同一個Flink運行時(...
    生活的探路者閱讀 1,475評論 3 8
  • 我有一個美麗的校園,她坐落在觀山湖區(qū)的一個邊界上怯邪,這里風(fēng)景優(yōu)美绊寻,景色迷人 。 在我的校園里悬秉,春天綠樹成陰澄步,夏天鮮花...
    b259d277bbcd閱讀 210評論 0 0
  • 這個男人的臉色相當不好,說完便走了和泌。 “為什么骨龍會潛伏到村莊村缸?”艾達問道。 “你讓專業(yè)的來講解吧武氓√菝螅”狄倫指...
    六道眾生閱讀 299評論 2 5