這篇文章給大家分享的是有關(guān)Flink怎么樣調(diào)度作業(yè)的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請域名、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、東安網(wǎng)站維護(hù)、網(wǎng)站推廣。
Flink中的執(zhí)行資源是通過任務(wù)執(zhí)行槽來確定的。每個TaskManager有一個或者多個任務(wù)執(zhí)行槽,每個可以運(yùn)行一個并行任務(wù)的流水線。每個流水線包含多個連續(xù)的任務(wù),像N次的MapFunction的并行實(shí)例跟一個ReduceFunction的n次并行實(shí)例。注意Flink經(jīng)常同時(shí)執(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í)行。
在內(nèi)部,F(xiàn)link通過SlotSharingGroup 和 CoLocationGroup來確定那些任務(wù)可以共享一個任務(wù)槽(許可的), 分別要把那些任務(wù)嚴(yán)格的放置到同一個執(zhí)行槽中。
在作業(yè)執(zhí)行階段,JobManager會持續(xù)跟蹤那些分布式執(zhí)行的任務(wù),決定什么時(shí)候調(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)。
每個執(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)。同時(shí)還需要撤銷所有正在運(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è)是不會被完全清理的。
在執(zhí)行圖ExecutionGraph執(zhí)行時(shí),每個并行任務(wù)都經(jīng)過了多個狀態(tài),從被創(chuàng)建完成到已完成或已失敗。下面這個圖說明這些狀態(tài)和他們之間可能的轉(zhuǎn)移關(guān)系。一個任務(wù)可能會執(zhí)行多次(例如:在故障恢復(fù)過程中)。由于這個原因,在一次執(zhí)行中Execution會跟蹤ExecutionVertex的執(zhí)行。
感謝各位的閱讀!關(guān)于“Flink怎么樣調(diào)度作業(yè)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!