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. Java安全之Commons Collections5分析

    Java安全之Commons Collections5分析 文章首发:Java安全之Commons Collections5分析 0x00 前言 在后面的几条CC链中,如果和前面的链构造都是基本一样的 ...

  2. SpringBoot + Swagger Demo

    Swagger是什么? Swagger 是一个规范且完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.  Swagger 的目标是对 REST API 定义一个标准且和语 ...

  3. redis方法-

    //链接错误注意 //1.防火墙 //2.配置文件IP绑定 $redis = new Redis(); //连接redis $redis->connect('127.0.0.1', 6379); ...

  4. 计算机网络-DHCP协议抓包分析总结

    前置问题:什么是(网络)协议? 网络协议为计算机网络中进行数据交换而建立的规则.标准或约定的集合. 而且: 一个网络协议至少包括三要素: 语法:用来规定信息格式;数据及控制信息的格式.编码及信号电平等 ...

  5. Java入门(5)

    阅读书目:Java入门经典(第7版) 作者:罗格斯·卡登海德 protected变量只能在其所在的类,该类的子类,以及同一个包里的其他类中使用.包是一组用于完成相同目标的相关类. private变量只 ...

  6. 动态规划——用二进制表示集合的状态压缩DP

    动态规划当中有非常常见的一个分支--状态压缩动态规划,很多人对于状态压缩畏惧如虎,但其实并没有那么难,希望这文章能带你们学到这个经典的应用. 二进制表示状态 在讲解多重背包问题的时候,我们曾经讲过二进 ...

  7. Javasript中this指向问题和改变this指向的方法

    在学习javascript中我们往往会被this的指向问题弄的头昏转向,今天我们就来学习一下this的指向问题,和改变this指向的方法. 一.this的指向问题 在学习this的指向问题之前我们需要 ...

  8. MYSQL字段

    这里我的测试环境是wampserver 选择数据库 选择表 或者创建数据库和表 SHOW DATABASES; 查看数据库 CREATE DATABASE 数据库名; 创建数据库 在 MySQL 中, ...

  9. C++动态存储方式与静态存储方式

    如果从变量值存在的时间(即生存期)来分,可将程序中的变量分为:动态存储方式和静态存储方式.它们所占用的存储空间区域不同. C++存储空间区域 代码区:存放可执行程序的程序代码.静态存储区:存放静态变量 ...

  10. Docker系列03—Docker 存储卷

    一.存储卷介绍 1.1 背景 Docker 的 AFUS 分层文件系统 docker镜像由多个只读层叠加而成,启动容器时,docker会加载只读镜像层并在镜像栈顶部加一个读写层: 如果运行的容器修改了 ...