Flink系列之Flink中四层Graph详解

news2024/11/19 1:47:31

title: Flink系列


四、Flink Runtime 四层 Graph 详解

首先回顾一下 Flink 的整体架构设计:

{% asset_img processes.svg %}
在这里插入图片描述

关于上图中的一些概念的解释:

1、DataFlow Graph 是一个逻辑概念,表示这个应用程序的一个执行图,事实上在客户端的时候,会生成两个图:StreamGraph + JobGraph
	注意:StreamGraph 中两种非常重要的概念: StreamNode(Operator 算子)顶点 + StreamEdge 边 。在源码的org.apache.flink.streaming.api.graph.StreamGraph 类中。

2、Client 就是一个 Http 方式的 Restful Client ,负责提交 JobGraph 到 JobManager 中。

3、Jobmanager 接收到 JobGraph 之后,会做一件非常重要的事情:启动一个 JobMaster , 这个 JobMaster 就是负责这个 Job 的执行的,JobMaster 的内部,维护了一个 JobGraph ; 在构造 JobMaster 的时候,同时也会帮 JobGraph 构造成 ExecutionGraph
	注意:ExecutionGraph = ExecutionVertex 顶点(这个顶点 里面有一个抽象就代表了一个 Task 的一切信息:Execution , 一个 Execution 会启动一个 Task)

4、JobMaster 接下来会向 ResourceManager 申请 Slot 资源,申请到了之后会部署 Task 启动执行。(注意这个 ResourceManager 不是 YARN 里面的,是JobManager 里面的管理资源的组件)  

5、当所有的 Task 都部署到 TaskManager 里面之后,并且都启动好了,并且上下游 Task 之间都建立了连接,则最终形成了一个 物理执行图。

Flink 的一个 Job最终归根结底,是去构建一个高效率的能用于分布式并行执行的 DAG 执行图。Flink 中的执行图可以分成四层:StreamGraph ==> JobGraph ==> ExecutionGraph ==> 物理执行图

StreamGraph:是根据用户通过 Stream API 编写的代码生成的最初的图。用来表示程序的拓扑结构。

JobGraph:StreamGraph 经过优化后生成了 JobGraph,提交给 JobManager 的数据结构。主要的优化为,将多个符合条件的节点 chain 在一起作为一个节点,这样可以减少数据在节点之间流动所需要的序列化反序列化传输消耗。

ExecutionGraph:JobManager 根据 JobGraph 生成 ExecutionGraph。ExecutionGraph 是 JobGraph 的并行化版本,是调度层最核心的数据结构。

物理执行图:JobManager 根据 ExecutionGraph 对 Job 进行调度后,在各个 TaskManager 上部署 Task 后形成的图,并不是一个具体的数据结构。

Flink 四层图模型:

在这里插入图片描述

上面这张图清晰的给出了 Flink 各个图的工作原理和转换过程。其中最后一个物理执行图并非 Flink 的数据结构,而是程序开始执行后,各个 Task 分布在不同的节点 上,所形成的物理上的关系表示:

1、从 JobGraph 的图里可以看到,数据从上一个 operator(JobVertex) 流到下一个 operator(JobVertex) 的过程中,上游作为生产者提供了IntermediateDataSet,而下游作为消费者需要 JobEdge。事实上,JobEdge 是一个通信管道,连接了上游生产的 dataset和下游的 JobVertex 节点。

2、在 JobGraph 转换到 ExecutionGraph 的过程中,主要发生了以下转变:

(1)加入了并行度的概念,成为真正可调度的图结构
(2)生成了与 JobVertex 对应的 ExecutionJobVertex,ExecutionVertex,与 IntermediateDataSet 对应的 IntermediateResult 和 IntermediateResultPartition 等,并行将通过这些类实现

3、ExecutionGraph 已经可以用于调度任务。我们可以看到,Flink 根据该图生成了一一对应的 Task,每个 Task 对应一个ExecutionGraph 的一个 Execution。
Task 用 InputGate、InputChannel 和 ResultPartition 对应了上面图中的 IntermediateResult和 ExecutionEdge。

那么,设计中为什么要设计这么四层执行逻辑呢?它的意义是什么?

1、StreamGraph 是对用户逻辑的映射
2、JobGraph 在 StreamGraph 基础上进行了一些优化,比如把一部分操作串成 chain 以提高效率
3、ExecutionGraph 是为了调度存在的,加入了并行处理的概念
4、物理执行结构:真正执行的是 Task 及其相关结构

总结:Flink 的四层图概念:

1、StreamGraph 就是通过用户编写程序时指定的算子进行逻辑拼接的
简单说:就是进行算子拼接
2、JobGraph 其实就是在 StreamGraph 的基础之上做了一定的优化,然后生成的逻辑执行图
简单说:就是把能 优化拼接在一起,放在一个 Task 中执行的算子的整合和优化 chain 在一起形成 OperatorChain,类似于 Spark Stage 切分
3、ExecutionGraph 再把 JobGraph 进行并行化生成 ExecutionGraph
简单说:其实 ExecutionGraph 就是 JobGraph 的并行化版本
4、物理执行图 其实是 ExecutionGraph 调度运行之后形成的分布,当一个 Flink Stream Job 中的所有的 Task 都被调度执行起来了之后的状态
简单说:就是最终运行状态图

两个重要的转化:

1、StreamGraph 转变成 JobGraph:把上下游两个相邻算子如果能 chain 到一起,则 chain 到一起做优化
2、JobGraph 转变成 ExecutionGraph: chain 到一起的多个 Operator 就会组成一个 OperatorChain,当 OperatorChain 执行的时候,到底要执行多少个Task,则就需要把 DAG 进行并行化变成实实在在的 Task 来调度执行

补充一张图:Flink job 提交流程

在这里插入图片描述



声明:
        文章中代码及相关语句为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。


By luoyepiaoxue2014

B站: https://space.bilibili.com/1523287361 点击打开链接
微博地址: http://weibo.com/luoyepiaoxue2014 点击打开链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开关电源环路笔记(11)-TL431电路的几个电阻的取值

上次文章发出来后,有兄弟留言布置了作业,让说说几个电阻的取值,就是下图的Rled,Rbias,R1,Rlower等。那么就写写吧,毕竟,这个电路确实用得非常多,实际工作中确实也需要知道…

登录信息记录模块实现(UserAgentUtils)

如果文章对你有帮助欢迎【关注❤️❤️❤️点赞👍👍👍收藏⭐⭐⭐】一键三连!一起努力! 一、UserAgentUtils简介 user-agent-utils 是一个用来解析 User-Agent 字符串的 Java 类库。 其能够识别的内容包括&#xff1a…

32_STM32内部温度传感器实验

目录 内部温度传感器简介 STM32ADC对应引脚 内部温度传感器使用注意使用事项 开启内部温度传感器步骤 实验源码 内部温度传感器简介 内部温度传感器框图 从图上可以看出温度传感器可通过TSVREFR控制位连接到ADC的固定通道16,温度的值最终肯定是被转换成电压值,电压值然后通…

学会python这十个语言技法,让你有上手风范

如何让你的代码更有python味? 大部分编程语言都有共性,也有个性。下手害怕个性,视为异端,抵触之;上手善用个性,欣欣然,妙用之。 1、三元表达式 别抱怨python没有三元表达式,请看&…

《大数据导论》之数据的概念、类型和组织形式

目录 说在前面 一、数据的概念 二、数据类型 ​三、数据组织形式 说在前面 大数据时代悄然来临,带来了整个信息技术发展的巨大变革,并深刻影响着社会生产和人们生活的方方面面。全球范围内,世界各国政府也非常重视整个大数据的研究和产业…

hadoop pig-0.17.0 安装配置

下载Apache Pig 首先,从以下网站下载最新版本的Apache Pig,下载Pig步骤取自W3C:Pig安装教程 步骤1 打开Apache Pig网站的主页。在News部分下,点击链接release page(释放),如下面的快照所示。 步…

解决git中出现的“bash syntax error near unexpected token ’(‘”错误

今天来分享一篇关于我在git使用过程中出现的一个错误。 错误信息: bash: syntax error near unexpected token (’ 翻译过来就是提示我在’(这里有错误,而这个错误是我在使用git commit提交时候产生的,我当时是这么写的: git c…

java中Optional的应用,以及map和flatMap的区别

关于Option的介绍可以看深入理解java8中的Optional 类就可以了,但是复杂一点的使用在网上却没有搜到,这里结合我开发时遇到的真实案例来讲一下Option的使用。 1.案例一 在真实业务操作过程中,都是对象里面套对象,这边先简单定义操…

flink window 框架详细解读

1. dataStream window group window time window 基于时间驱动 滚动时间窗口 tumble time window 滑动时间窗口 sliding time window 会话时间窗口 session time window count window 基于数据驱动 滚动计数窗口 tumble count window 滑动计数窗口 sliding count window 2. s…

皕杰报表之雷达图

雷达图(又可称为戴布拉图、螂蛛网图)是数据分析报表的一种。即将各项数据分析所得的数字或比率,就其比较重要的项目集中划在一个图表上,来表现一组数据的各项数据比率的情况,使用者能一目了然的了解这个数据的指标的变…

LeetCode中等题之通过最少操作次数使数组的和相等

题目 给你两个长度可能不等的整数数组 nums1 和 nums2 。两个数组中的所有值都在 1 到 6 之间(包含 1 和 6)。 每次操作中,你可以选择 任意 数组中的任意一个整数,将它变成 1 到 6 之间 任意 的值(包含 1 和 6&#…

计算机组成大题分析(三)

假定计算机 M 字长为 16 位,按字节编址,连接 CPU 和主存的系统总线中地址线为 20 位、数据线为 8位,采用 16 位定长指今字,指令格式及其说明如下: 其中,op1-op3 为操作码,rs,t 和 rd 为通用寄存…

【计算机视觉+CNN】keras+ResNet残差网络实现图像识别分类实战(附源码和数据集 超详细)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一、深度卷积神经网络模型结构 1:LeNet-5 LeNet-5卷积神经网络首先将输入图像进行了两次卷积与池化操作,然后是两次全连接层操作,最后使用Softmax分类器作为多分类输出,它对…

MySQL插入汉字报错的解决方案

MySQL插入汉字报错的原因是字符集的问题,MySQL默认使用的是Latin(拉丁文)字符集,可以在创建数据库时指定其字符集:CREATE DATABASE test DEFAULT CHARACTER SET utf8 或者修改MySQL的配置文件,可以参考以下…

Qt事件循环嵌套,BlockingQueuedConnection与QWaitCondition比较

前言: 之前写过有关事件循环和条件变量的博客: Qt使用事件循环,信号,stop变量,sleep阻塞,QWaitConditionQMutex条件变量,退出子线程工作_大橘的博客-CSDN博客_qt stop函数 Qt事件循环&#x…

Unity3D导出Android工程中使用并交互

, 目录 1,版本信息 2,前期准备 Unity方面: Android方面: 3,Android与Unity3D交互 1,版本信息 unity2020 android studio 2021 *不要用android studio 2020系列,存在不能导入Library的b…

Spring学习 | Bean作用域生命周期

文章目录一、作用域1.1 xml文件中配置1.2 注解配置二、生命周期2.1 四个阶段2.2 添加后置处理器2.3 实现aware类型接口2.4 Bean 初始化的方式2.5 Bean 销毁的方式2.6 测试程序学习视频🎥:https://www.bilibili.com/video/BV1Vf4y127N5 一、作用域 ❓ 引入…

Linux系统中裸机按键中断的驱动方法

大家好,今天主要和大家聊一聊,如何实现按键中断的驱动​方法。 目录 ​第一:外部中断头文件实现 ​第二:外部中断源文件的具体实现 ​第三:编写对应的main.c函数 ​第一:外部中断头文件实现 #ifndef _…

基于keras平台CNN神经网络模型的服装识别分析

在许多介绍图像识别任务的介绍中,通常使用着名的MNIST数据集。 最近我们被客户要求撰写关于图像识别的研究报告,包括一些图形和统计输出。但是,这些数据存在一些问题: 1.太简单了。例如,一个简单的MLP模型可以达到99…

Java搭建宝塔部署实战毕设项目springboot客户管理系统源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套Java开发的毕业设计项目,springboot客户管理系统源码,感兴趣的朋友可以自行下载搭建测试。 技术架构 技术框架:SpringBoot MySQL5.7 mybatis shiro Lay…