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

相关文章
相关标签/搜索