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生成过程分析的更多相关文章

  1. Flink - watermark生成

    参考,Flink - Generating Timestamps / Watermarks watermark,只有在有window的情况下才用到,所以在window operator前加上assig ...

  2. Linux移植之子目录下的built-in.o生成过程分析

    在Linux移植之make uImage编译过程分析中罗列出了最后链接生成vmlinux的过程.可以看到在每个子目录下都有一个built-in.o文件.对于此产生了疑问built-in.o文件是根据什 ...

  3. Flink assignAscendingTimestamps 生成水印的三个重载方法

    先简单介绍一下Timestamp 和Watermark 的概念: 1. Timestamp和Watermark都是基于事件的时间字段生成的 2. Timestamp和Watermark是两个不同的东西 ...

  4. Android属性之build.prop生成过程分析

    Android的build.prop文件是在Android编译时刻收集的各种property(LCD density/语言/编译时间, etc.),编译完成之后,文件生成在out/target/pro ...

  5. linux 内核 zImage 生成过程分析

    1. 依据arch/arm/kernel/vmlinux.lds 生成linux内核源码根目录下的vmlinux,这个vmlinux属于未压缩,带调试信息.符号表的最初的内核,大小约23MB: arm ...

  6. u-boot-2015.07 autoconf.mk生成过程分析

    1.u-boot2015.7版本编译没有在顶层目录中生成.config文件,而生成了include/autoconf.mk和include/autoconf.mk.dep两个文件,并在每个模块编译的时 ...

  7. u-boot.bin生成过程分析

    ELF格式“u-boot”文件的生成规则如下,下面对应Makefile的执行过程分别分析各个依赖. $(obj)u-boot: depend version $(SUBDIRS) $(OBJS) $( ...

  8. Android系统移植与调试之------->build.prop生成过程分析

    本文简要分析一下build.prop是如何生成的.Android的build.prop文件是在Android编译时刻收集的各种property(LCD density/语言/编译时间, etc.),编 ...

  9. Android属性之build.prop生成过程分析(转载)

    转自: http://www.cnblogs.com/myitm/archive/2011/12/01/2271032.html 本文简要分析一下build.prop是如何生成的.Android的bu ...

随机推荐

  1. 怎么购买合适的4G DTU

    4G DTU指的是采用FDD-LTE或者TD-LTE的4G网络实现将是本地串口数据进行无线长距离数据传输,和远程公网服务器进行数据交互,主要用于远程数据采集和远程控制项目.在购买之前,也要对4G DT ...

  2. Go语言中的互斥锁和读写锁(Mutex和RWMutex)

    目录 一.Mutex(互斥锁) 不加锁示例 加锁示例 二.RWMutex(读写锁) 并发读示例 并发读写示例 三.死锁场景 1.Lock/Unlock不是成对出现 2.锁被拷贝使用 3.循环等待 虽然 ...

  3. django基础回顾

    1,web项目工作流程 1.1 了解web程序工作流程 1.2 django生命周期2,django介绍 目的:了解Django框架的作用和特点 作用: 简便.快速的开发数据库驱动的网站 Django ...

  4. Polyglot Translators: Let's do i18n easier! 一款国际化插件小助手!

    在做国际化文本有关的工作时, 是否厌倦了在不同应用或者网页之间频繁地切换进行中文, 繁体, 英文甚至韩文日文的文本翻译工作? 好吧, 我就是受不了频繁在进行文本字符串的转换, 还得跑到百度翻译上面搜索 ...

  5. Mybatis日记

    SqlSession build: ExecutorType :SIMPLE ,REUSE, BATCH, SIMPLE 为默认执行器: REUSE 为可重用执行器,重用Statement,执行器会缓 ...

  6. How to: Debug X++ Code Running in .NET Business Connector [AX 2012]

    This topic has not yet been rated - Rate this topic  http://msdn.microsoft.com/EN-US/library/bb19006 ...

  7. 2020 校招,我是如何拿到小米、京东、字节大厂前端offer

    前言 Hi~,我是 2020 届物联网专业毕业生,现就读于杭州.谨以此文来记录我的秋招以及入门前端以来的学习历程,如有错误,希望大家能及时提出! 面试情况 从19年8月初到11月底,前前后后一共面试了 ...

  8. python爬虫03 Urllib库

    Urllib   这可是 python 内置的库 在 Python 这个内置的 Urllib 库中 有这么 4 个模块 request request模块是我们用的比较多的 就是用它来发起请求 所以我 ...

  9. Magic Method

    Python 的 Magic Method 在 Python 中,所有以 "__" 双下划线包起来的方法,都统称为"魔术方法".比如我们接触最多的 __init ...

  10. Linux系统中使用confluence构建企业wiki

    搭建confluence服务需要的步骤有:一,安装java环境即安装jdk8.二,安装需要使用的数据库(建议使用mysql5.6).三,破解的confluence6服务. 一,所需软件下载 1,下载j ...