首页 > 其他 > 详细

flink:JobGraph生成过程分析

时间:2020-11-28 12:32:28      阅读:39      评论:0      收藏:0      [点我收藏+]

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更容易理解。

flink:JobGraph生成过程分析

原文:https://www.cnblogs.com/wangwei0721/p/14051959.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!