微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

flink:JobGraph生成过程分析

1、JobGraph是由StreamGraph转换而来,当client将StreamGraph提交后,job启动前会先完成转换,统一的转换入口如下:


2、StreamingJobGraphGenerator类
StreamingJobGraphGenerator的职责就是将StreamGraph转换成JobGraph,在转换的过程中要根据StreamGraph中的节点及边的对应关系进行算子链的合并,同时将一些其他与任务执行相关联的信息复制过来,接下来主要需要关注其中的构造方法、转换方法、判断能否合并的逻辑、算子合并的方法、StreamNode转换为JobVertex等几个核心方法即可梳理清楚其转换的业务
2.1、构造方法


其构造方法中主要包含三个内容,保存了StreamGraph、构造了JobGraph、同时new了一系列的集合容器用于存储转换的中间态
2.2、转换方法createJobGraph


createJobGraph方法中逻辑很清晰,除了合并算子就是复制一些其他执行参数
2.3、setChaining和createChain方法
在这两处完成了算子的合并核心逻辑,其实就是根据能否chain的判定进行不同的处理,其步骤可以归纳为:


a、因为在StreamGraph中已经形成了完整的DAG图,此处直接遍历source节点,从source节点往后挨个去createChain


b,createChain时先拿到当前节点的下游节点,然后递归处理,构建出整个的传递链


c、在构造JobVertex时,如果从前面传递过来的两个节点ID相同,则证明是头结点,则生成一个JobVertex,并将传递链中的后续算子connect起来,如果不是则表示应当是被合并的算子,则仅维护StreamConfig即可
d、于此同时也维护好对应的执行资源数据、格式化数据等
2.4、能否chain成链的判断逻辑


判断很简洁明了,不再赘述
2.5、createJobVertex
如果是头结点时就将头节点转化为一个JobVertex,此处有InputOutputFormatVertex和JobVertex的区别


2.6 connect
此处就是根据不同的策略,将传递链上的对应关系维护到一个Jobedge中去。

最后,总的来看由于在StreamGraph中已经构建好了DAG的关系和映射,在StreamingJobGraphGenerator将这个映射关系再次优化而已,在此过程中还涉及到JobGraph、JobVertex、Jobedge等对象,这些可以对比StreamGraph、StreamNode和StreamEdge更容易理解。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐