flink:JobGraph生成過程分析

一、JobGraph是由StreamGraph轉換而來,當client將StreamGraph提交後,job啓動前會先完成轉換,統一的轉換入口以下:

二、StreamingJobGraphGenerator類
StreamingJobGraphGenerator的職責就是將StreamGraph轉換成JobGraph,在轉換的過程當中要根據StreamGraph中的節點及邊的對應關係進行算子鏈的合併,同時將一些其餘與任務執行相關聯的信息複製過來,接下來主要須要關注其中的構造方法、轉換方法、判斷可否合併的邏輯、算子合併的方法、StreamNode轉換爲JobVertex等幾個核心方法便可梳理清楚其轉換的業務
2.一、構造方法

其構造方法中主要包含三個內容,保存了StreamGraph、構造了JobGraph、同時new了一系列的集合容器用於存儲轉換的中間態
2.二、轉換方法createJobGraph

createJobGraph方法中邏輯很清晰,除了合併算子就是複製一些其餘執行參數
2.三、setChaining和createChain方法
在這兩處完成了算子的合併核心邏輯,其實就是根據可否chain的斷定進行不一樣的處理,其步驟能夠概括爲:

a、由於在StreamGraph中已經造成了完整的DAG圖,此處直接遍歷source節點,從source節點日後挨個去createChain

b,createChain時先拿到當前節點的下游節點,而後遞歸處理,構建出整個的傳遞鏈

c、在構造JobVertex時,若是從前面傳遞過來的兩個節點ID相同,則證實是頭結點,則生成一個JobVertex,並將傳遞鏈中的後續算子connect起來,若是不是則表示應當是被合併的算子,則僅維護StreamConfig便可
d、於此同時也維護好對應的執行資源數據、格式化數據等
2.四、可否chain成鏈的判斷邏輯

判斷很簡潔明瞭,再也不贅述
2.五、createJobVertex
若是是頭結點時就將頭節點轉化爲一個JobVertex,此處有InputOutputFormatVertex和JobVertex的區別

2.6 connect
此處就是根據不一樣的策略,將傳遞鏈上的對應關係維護到一個JobEdge中去。優化

最後,總的來看因爲在StreamGraph中已經構建好了DAG的關係和映射,在StreamingJobGraphGenerator將這個映射關係再次優化而已,在此過程當中還涉及到JobGraph、JobVertex、JobEdge等對象,這些能夠對比StreamGraph、StreamNode和StreamEdge更容易理解。3d

相關文章
相關標籤/搜索