1 转换基本流程



2 简单来看可以分为两部分:

第一部分是通过一些util、translator、generator等类将职责进行解耦、托管和分离,期间涉及FlinkPipelineTranslationUtil、FlinkPipelineTranslator/StreamGraphTranslator、StreamingJobGraphGenerator等。

第二部分最终转换的操作落在StreamingJobGraphGenerator中,涉及StreamGraph、StreamEdge、StreamConfig、JobGraph、JobVertex等,下面主要关注点在第二步:

3 StreamingJobGraphGenerator的构造方法和成员变量

唯一构造方法:



将StreamGraph对象作为参数传递进来,并初始化一个JobGraph空壳和一系列的成员变量(主要是map,需要保持各种对应关系),用于存储转换的中间态



从命名不难看出各个map的作用,核心套路大多是用节点id或者节点的hash值映射节点

4 StreamingJobGraphGenerator.createJobGraph方法

主要要弄清楚StreamNode转化成JobVertex、算子合并、边上下游关系转换的核心逻辑



4.1 StreamingJobGraphGenerator.createChain方法

这里主要是把SteamNode转化为JobVertex,并根据按需合并算子

步骤:

a、在调用时遍历节点,并通过builtVertices保存已经处理过的节点

b,判断outEdge能不能chain,分门别类放到不同的List集合中待处理

c、对于能chain的节点,就把自己衔接到前一个上面去,把衔接的路径存储下来,然后再把衔接的前一个和自己的后一个再递归调用拿去计算

d、对于不能chain的节点,就作为一个头节点来单独处理掉

e、然后维护单个/合并后的关系,包括合并后的命名、资源、格式化方式等

f、处理转换逻辑,如果是头就创建个JobVertex返回StreamConfig,如果不是就创建个StreamConfig



4.2 StreamingJobGraphGenerator.isChainable方法

决定StreamEdge两边能否chian的逻辑:



4.3 StreamingJobGraphGenerator.createChainedName方法

这个是处理合并后的命名,在日志中或者生成的图中可以看到



4.4 StreamingJobGraphGenerator.createJobVertex方法

这里是StreamNode转变为JobVertex的真正实现,其实也很简单,第一步根据节点的输出new出不同类型的JobVertex,第二步把StreamNode的执行参数复制过来,第三步把自己和相关的映射关系填充到jobGraph和相应的map中去



4.5 StreamingJobGraphGenerator.connect方法



5 总的来看由于在StreamGraph中已经构建好了DAG的关系和映射,此过程中最核心的逻辑就是在createChain合并算子的过程。

6、下面是JobGraph、JobVertex和JobEdge的主要属性,可以对比StreamGraph、StreamNode和StreamEdge来理解





flink:StreamGraph转换为JobGraph的更多相关文章

  1. 追源索骥:透过源码看懂Flink核心框架的执行流程

    li,ol.inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt, ...

  2. flink学习笔记:DataSream API

    本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...

  3. flink学习笔记-flink实战

    说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...

  4. Flink学习笔记-支持的数据类型

    说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...

  5. Flink 灵魂两百问,这谁顶得住?

    Flink 学习 https://github.com/zhisheng17/flink-learning 麻烦路过的各位亲给这个项目点个 star,太不易了,写了这么多,算是对我坚持下来的一种鼓励吧 ...

  6. Flink源码分析 - 剖析一个简单的Flink程序

    本篇文章首发于头条号Flink程序是如何执行的?通过源码来剖析一个简单的Flink程序,欢迎关注头条号和微信公众号"大数据技术和人工智能"(微信搜索bigdata_ai_tech) ...

  7. 透过源码看懂Flink核心框架的执行流程

    前言 Flink是大数据处理领域最近很火的一个开源的分布式.高性能的流式处理框架,其对数据的处理可以达到毫秒级别.本文以一个来自官网的WordCount例子为引,全面阐述flink的核心架构及执行流程 ...

  8. [源码解析] 当 Java Stream 遇见 Flink

    [源码解析] 当 Java Stream 遇见 Flink 目录 [源码解析] 当 Java Stream 遇见 Flink 0x00 摘要 0x01 领域 1.1 Flink 1.2 Java St ...

  9. Flink源码阅读(1.7.2)

    目录 Client提交任务 flink的图结构 StreamGraph OptimizedPlan JobGraph ExecutionGraph flink部署与执行模型 Single Job Jo ...

随机推荐

  1. Java进阶面试

    消息中间件: 1.你们公司生产环境用的是什么消息中间件? https://mp.weixin.qq.com/s?__biz=MzU0OTk3ODQ3Ng==&mid=2247484149&am ...

  2. Spring笔记(6) - Spring的BeanFactoryPostProcessor探究

    一.背景 在说BeanFactoryPostProcessor之前,先来说下BeanPostProcessor,在前文Spring笔记(2) - 生命周期/属性赋值/自动装配及部分源码解析中讲解了Be ...

  3. python使用SVC算法

    python使用SVC算法评估汽车价值 关注公众号"轻松学编程"了解更多. 这是一个关于汽车测评的数据集, 类别变量为汽车的测评: (unacc,ACC,good,vgood) ​ ...

  4. eyoucms破解授权/去版权插件

    插件描述:eyoucms内容管理系统的授权破解,可以去版权的插件,需要请自行关注. https://hbh.cool/find/136.html

  5. Java基础—反射与代理(新手向)

    第1章 反射与代理 1.1 反射定义 一般情况下,需要一个功能的前提是遇到了某个问题,这里先列举一些问题,然后再通过反射是如何解决了这些问题,来引出反射的定义. 普通开发人员工作中最常见的问题:需要生 ...

  6. html+vue.js 实现分页可兼容IE

    当功能比较简单,在单一html中使用vue.js分页展示数据,并未安装脚手架,或使用相关UI框架,此时需要手写一个分页器,不失为最合理最便捷的解决方案, 先看一下实现效果: 上代码: 1.简单搞一搞 ...

  7. CF1066F Yet another 2D Walking

    DP 由图可以知道优先级相同的点都在一个"7"字形中 所以在走当前的优先级的点时最好从右下的点走到左上的点,或从从左上的点走到右下的点 那记dp[i][0]表示在走完第i个优先级时 ...

  8. 1到n整数中1出现的次数

    1到n整数中1出现的次数 题目描述 输入一个整数n, 求1~n这n个整数的十进制表示中1出现的次数. 例如, 输入12, 1~12这些整数中包含1的数字有1, 10, 11和12, 1一共出现了4次 ...

  9. 【Kata Daily 190917】Numericals of a String(字符出现的次数)

    题目: You are given an input string. For each symbol in the string if it's the first character occuren ...

  10. Python 3.9就要来了......,令人兴奋的时刻

    本文主要介绍Python3.9的一些新特性,如:更快速的进程释放,性能的提升,简便的新字符串函数,字典并集运算符以及更兼容稳定的内部API,详细如下: 字典并集和可迭代更新 字符串方法 类型提示 新的 ...