首页 > 编程语言 >Flink源码解析(九)——ExecutionGraph生成过程解析

Flink源码解析(九)——ExecutionGraph生成过程解析

时间:2023-12-23 21:44:46浏览次数:32  
标签:ExecutionGraph 实例 Flink 生成 DefaultExecutionGraph 源码 解析 ExecutionVertex

一、ExecutionGraph介绍介绍

ExecutionGraph是调度Flink作业执行的核心数据结构,包含了作业中所有并行执行的Task信息、Task之间的关联关系、数据流转关系。相比于StreamGraph、JobGraph,ExecutionGraph加入了并行度的概念,成为真正可调度的图结构。下图是一个ExecutionGraph的简单示例。

 

二、ExecutionGraph核心对象介绍

ExecutionGraph核心对象包含ExecutionJobVertex、ExecutionVertex、IntermediateResult、IntermediateResultPartition、ExecutionEdge、Execution等。在较新版本中,ExecutionEdge已被其他数据结构替换。

1、ExecutionJobVertex:该对象与JobGraph中的JobVertex一一对应。它包含一组ExecutionVertex,数量是该节点所对应的并行度。

2、ExecutionVertex:ExecutionJobVertex会对Flink应用中执行节点并行化处理,构造可并行执行的ExecutionVertex实例。

3、IntermediateResult:该对象与JobGraph中的IntermediateDataSet一一对应,表示ExecutionJobVertex的输出。一个IntermediateResult包含多个IntermediateResultPartition,数据取决于算子的并行度。

4、IntermediateResultPartition:表示1个ExecutionVertex输出结果,与ExecutionEdge相关联。

5、ExecutionEdge:

6、Execution:ExecutionVertex相当于Task的模板,真正执行的时候Flink系统会从ExecutionVertex封装出一个Execution实例,代表一个实际的运行尝试。一个Execution通过一个ExecutionAttempID来唯一标识。

三、ExecutionGraph生成过程解析

1、ExecutionGraph生成入口:

ExecutionGraph生成入口在方法DefaultExecutionGraphBuilder.buildGraph()中。该方法主要入参包括随笔八中生成的JobGraph实例及其他一些重要组件,经过一些必要的信息生成后buildGraph()方法经历以下几个关键步骤后会生成一个DefaultExecutionGraph实例并构造出以上分析的核心对象,最后返回DefaultExecutionGraph实例。以下为几个关键步骤的简述,后面会详细讲解。
final DefaultExecutionGraph executionGraph = new DefaultExecutionGraph();初始化一个空DefaultExecutionGraph实例,设置一些空的成员变量。
List<JobVertex> sortedTopology = jobGraph.getVerticesSortedTopologicallyFromSources();
executionGraph.attachJobGraph(sortedTopology, jobManagerJobMetricGroup);
isCheckpointingEnabled(jobGraph);为true时的

标签:ExecutionGraph,实例,Flink,生成,DefaultExecutionGraph,源码,解析,ExecutionVertex
From: https://www.cnblogs.com/GeQian-hq/p/17911407.html

相关文章

  • 医院患者职工食堂订餐系统食堂报餐系统医院订餐系统源码
    医院订餐系统,食堂报餐,一床一码,手机扫码核销主要功能:患者管理:患者订单信息,患者床位信息菜品管理:价格,图片,规格订餐类型管理:早中晚,日期病房床位管理:科室->床位收入汇总 下单后食堂打印机出票开发语言:uniapp前端+tinkphp后台+mysql数据库  ......
  • Spring MVC 源码分析 - HandlerMapping 组件(三)之 AbstractHandlerMethodMapping
    HandlerMapping组件HandlerMapping组件,请求的处理器匹配器,负责为请求找到合适的 HandlerExecutionChain 处理器执行链,包含处理器(handler)和拦截器们(interceptors)handler 处理器是Object类型,可以将其理解成HandlerMethod对象(例如我们使用最多的 @RequestMapping 注解所标......
  • 一些高中解析几何的通解
    最近学解析几何,发现很多题可以直接套通解,于是把通解求了个遍。点和点求\(P_1(x_1,y_1)\)、\(P_2(x_2,y_2)\)所在的直线\(\left(y_{2}-y_{1}\right)x+\left(x_{1}-x_{2}\right)y+x_{2}y_{1}-x_{1}y_{2}=0\)https://www.desmos.com/calculator/tzjl5dpoi1求\(P_1(x_1......
  • spring-jcl 模块源码分析
    目录简介源码分析总结简介spring-jcl是spring用于处理日志打印的模块,被spring-core所依赖:jcl全称是JakartaCommonsLogging,是apache提供的日志门面(功能同slf4j),日志门面利用设计模式中的门面模式提供统一的日志接口,实际的日志实现可以任意更换。不过jcl支持的日志实现有限,已......
  • ClickHouse(19)ClickHouse集成Hive表引擎详细解析
    目录Hive集成表引擎创建表使用示例如何使用HDFS文件系统的本地缓存查询ORC输入格式的Hive表在Hive中建表在ClickHouse中建表查询Parquest输入格式的Hive表在Hive中建表在ClickHouse中建表查询文本输入格式的Hive表在Hive中建表在ClickHouse中建表资料分享参考文......
  • 基于SpringBoot+Vue的文理医院预约挂号系统设计实现(源码+lw+部署文档+讲解等)
    (文章目录)前言:heartpulse:博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌:heartpulse:......
  • 源码安装pgsql16.1
    源码安装pgsql16.1进入postgresql官网下载源码包postgresql源码包下载地址这里以目前最新的pgsqlv16.1为例创建组:postgresgroupaddpostgres创建用户postgres并加入组postgres中useradd-gpostgrespostgres解压源码包tar-xfpostgresql-16.1.tar.gz进入解压后的目......
  • 短视频app源码,实现幂等设计的重要方式
    短视频app源码,实现幂等设计的重要方式一、取消重试取消重试有两种方法,第一是设置重试次数为零,第二是选择不重试的集群容错策略。<!--设置重试次数为零--><dubbo:referenceid="helloService"interface="com.java.front.dubbo.demo.provider.HelloService"retries="......
  • 软件测试/测试开发|npm常见报错解析
    简介使用npm(NodePackageManager)进行包管理时,常常会遇到各种报错信息。这些报错可能源自于网络问题、包依赖、配置错误或系统环境等多种因素。解决这些问题需要一定的经验和技巧。在这篇文章中,我们会介绍一些常见的npm报错及其解决方法。npmERR!codeECONNRESET这个错误通常......
  • C 语言中布尔值的用法和案例解析
    C语言中的布尔值在编程中,您经常需要一种只能有两个值的数据类型,例如:是/否开/关真/假为此,C语言有一个bool数据类型,称为布尔值。布尔变量在C语言中,bool类型不是内置数据类型,例如int或char它是在C99中引入的,您必须导入以下头文件才能使用它:#include<stdbool.h>......