溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Flink怎么樣調(diào)度作業(yè)

發(fā)布時間:2021-12-28 11:59:52 來源:億速云 閱讀:149 作者:小新 欄目:云計算

這篇文章給大家分享的是有關(guān)Flink怎么樣調(diào)度作業(yè)的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

Scheduling? 調(diào)度

Flink中的執(zhí)行資源是通過任務(wù)執(zhí)行槽來確定的。每個TaskManager有一個或者多個任務(wù)執(zhí)行槽,每個可以運(yùn)行一個并行任務(wù)的流水線。每個流水線包含多個連續(xù)的任務(wù),像N次的MapFunction的并行實例跟一個ReduceFunction的n次并行實例。注意Flink經(jīng)常同時執(zhí)行多個連續(xù)的任務(wù):對數(shù)據(jù)流程序來說都會這樣,但是對于批處理程序來只是頻繁發(fā)生。

下面的圖說明了這個情況。一個帶數(shù)據(jù)源的程序,一個MapFunction和一個ReduceFunction。數(shù)據(jù)源和MapFunction都是按照4個并發(fā)度來執(zhí)行的,而ReduceFunction是按照3個并發(fā)度來執(zhí)行。這是一個包含了順序Source到Map到Reduce的流水線。在一個有兩個TaskManager的集群上,每個TaskManager各有3個任務(wù)執(zhí)行槽,這個程序?qū)凑障旅娴拿枋鰜韴?zhí)行。

Flink怎么樣調(diào)度作業(yè)

在內(nèi)部,F(xiàn)link通過SlotSharingGroup 和 CoLocationGroup來確定那些任務(wù)可以共享一個任務(wù)槽(許可的), 分別要把那些任務(wù)嚴(yán)格的放置到同一個執(zhí)行槽中。

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

在作業(yè)執(zhí)行階段,JobManager會持續(xù)跟蹤那些分布式執(zhí)行的任務(wù),決定什么時候調(diào)度執(zhí)行下一個任務(wù)(或者一組任務(wù)), 對完成的任務(wù)或執(zhí)行失敗作出反應(yīng)。

JobManager接收到JobGraph, JobGraph由包含操作的數(shù)據(jù)流(JobVertex) 和中間結(jié)果(IntermediateDataSet)來描述表示。每個操作都有屬性,像并行度執(zhí)行的代碼。另外JobGraph包含一組附加的操作代碼執(zhí)行必須的庫。

JobManager把JobGraph轉(zhuǎn)換成執(zhí)行圖ExecutionGraph。ExecutionGraph執(zhí)行圖 是一個JobGraph的并行版本:對于每個JobVertex ,它包含每個并行子任務(wù)的ExecutionVertex。一個并行度為100的操作會有一個JobVertex和100個ExecutionVertices。ExecutionVertex跟蹤具體任務(wù)的執(zhí)行狀態(tài)。一個JobVertex中所有的ExecutionVertices都會在一個ExecutionJobVertex中。ExecutionJobVertex跟蹤操作的的整體狀態(tài)。除了頂點(diǎn),ExecutionGraph執(zhí)行圖還包含中間結(jié)果IntermediateResult 和中間結(jié)果分區(qū) IntermediateResultPartition。前者跟蹤中間數(shù)據(jù)集的狀態(tài),后者跟蹤每個分區(qū)的狀態(tài)。

Flink怎么樣調(diào)度作業(yè)

每個執(zhí)行圖ExecutionGraph有個一個與之關(guān)聯(lián)的作業(yè)狀態(tài)。這個作業(yè)狀態(tài)表示了作業(yè)執(zhí)行的當(dāng)前狀態(tài)。

一個Flink作業(yè)開始是創(chuàng)建狀態(tài)完成,然后轉(zhuǎn)為運(yùn)行中狀態(tài),在完成所有作業(yè)之后再轉(zhuǎn)為完成狀態(tài)。萬一失敗了,作業(yè)就會轉(zhuǎn)為失敗中狀態(tài)并且會撤銷所有運(yùn)行的任務(wù)。如果作業(yè)定點(diǎn)到了最后的狀態(tài)并且作業(yè)不能重啟,那么作業(yè)轉(zhuǎn)為已經(jīng)失敗狀態(tài)。如果作業(yè)可以重啟,那么作業(yè)會進(jìn)入重啟中狀態(tài)。一旦作業(yè)重啟完成,作業(yè)會變成創(chuàng)建狀態(tài)完成。

如果用戶取消了作業(yè),那么作業(yè)就變成了取消中狀態(tài)。同時還需要撤銷所有正在運(yùn)行的任務(wù)。一旦所有的運(yùn)行的任務(wù)到了最終的狀態(tài),這個作業(yè)就編程了取消完成狀態(tài)。

不像已經(jīng)完成狀態(tài),已經(jīng)取消和已經(jīng)失敗狀態(tài)表示的是全局最終狀態(tài),并且會粗發(fā)清理作業(yè)任務(wù),已經(jīng)掛起狀態(tài)是只在本地終端的。本地終端的意思是作業(yè)的執(zhí)行已經(jīng)被自己的JobManager終止了,但是FLink集群上的另外一個JobManager可以通過持久化的HA存儲獲取這個作業(yè)并重啟這個作業(yè)。因此被掛起的作業(yè)是不會被完全清理的。

Flink怎么樣調(diào)度作業(yè)

在執(zhí)行圖ExecutionGraph執(zhí)行時,每個并行任務(wù)都經(jīng)過了多個狀態(tài),從被創(chuàng)建完成到已完成或已失敗。下面這個圖說明這些狀態(tài)和他們之間可能的轉(zhuǎn)移關(guān)系。一個任務(wù)可能會執(zhí)行多次(例如:在故障恢復(fù)過程中)。由于這個原因,在一次執(zhí)行中Execution會跟蹤ExecutionVertex的執(zhí)行。

Flink怎么樣調(diào)度作業(yè)

感謝各位的閱讀!關(guān)于“Flink怎么樣調(diào)度作業(yè)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI