Flink 任務提交


概述

這張圖表明了flink是如何看待用戶的處理流程的:抽象化為一系列operator,以source開始,以sink結尾,中間的operator做的操作叫做transform,並且可以把幾個操作串在一起執行。


image_1cae39t06eoo3ml1be8o0412c69.png-43.5kB



什么是operator?

在源碼中,我們可以看到一個flatMap算子,最終會被轉化成一個operator,下圖是flatMap被轉化成一個 operator。

image

下圖是map轉化成一個 operator。

image

我們可以認為用戶使用的各種算子,最終都是轉化成一個 operator。


多個operator如何排序組合

Flink采用了類似責任鏈模式的方式對operator進行組合,責任鏈模式下,通常每個接收者都包含對另一個接收者的引用。如果一個對象不能處理該請求,那么它會把相同的請求傳給下一個接收者,依此類推。具體參見:https://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html


程序什么時候運行

在編寫代碼的時候,不管是flatMap還是map等算子的使用,都是將operator注冊到環境中,並沒有開始執行任務。當用戶調用execute方式的時候,程序才開始准備執行。

env.execute("word count")

這里面主要做了兩件事情,一件事情是根據上面配置的責任鏈模式將生成StreamGraph,即程序的拓撲結構圖。另外一件事情就是生成JobGraph,也就是task list。

接下來的事情就比較好理解了,回到了客戶端提交任務到服務端的模式。服務端接收到我們的任務信息,先放入任務隊列、然后執行任務(申請資源、task分配、任務調度)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM