Flink ExecutionGraph生成源码解析

 更新时间:2022年12月01日 11:18:25   作者:xiangel  
这篇文章主要为大家介绍了Flink ExecutionGraph生成源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

前面我们在介绍DataStream时,介绍了Flink任务提交时从StreamGraph->JobGraph->ExecutionGraph的过程,而如何生成ExecutionGraph并没介绍,本节来介绍在具体调度执行时使用的图结构ExecutionGraph。StreamGraph和JobGraph是在Client生成的。

ExecutionGraph是在JobManager(Flink任务执行时的Master节点)端生成的,JobManager会根据提交的JobGraph来生成ExecutionGraph。

重要类

DefaultExecutionGraph

ExecutionGraph的实现类,保存了具体的Graph结构信息、具体执行时的作业和任务相关信息以及作业执行中的中间结果信息等。相关重要属性如下

    // JobGraph的节点ID和ExecutionGraph的节点信息映射
    private final Map<JobVertexID, ExecutionJobVertex> tasks;
    // 按依赖顺序的Execution节点数据
    private final List<ExecutionJobVertex> verticesInCreationOrder;
    // 执行尝试信息
    private final Map<ExecutionAttemptID, Execution> currentExecutions;
    //中间结果数据信息
    private final Map<IntermediateDataSetID, IntermediateResult> intermediateResults;
    // 当前作业状态
    private volatile JobStatus state = JobStatus.CREATED;
    //执行拓扑结构
    private DefaultExecutionTopology executionTopology;
    // checkpoint处理协调器
    @Nullable private CheckpointCoordinator checkpointCoordinator;

ExecutionJobVertex

在ExecutionGraph中的节点信息,与JobGraph的JobVertex是一一对应的。其中存储了

    // 每个子任务节点信息
    @Nullable private ExecutionVertex[] taskVertices;
    // 产出数据集
    @Nullable private IntermediateResult[] producedDataSets;
    // 输入数据集
    @Nullable private List<IntermediateResult> inputs;
    // 并行度
    private final VertexParallelismInformation parallelismInfo;

ExecutionVertex

ExecutionJobVertex中根据并行度生成的单个子任务,包括具体的子任务的编号,执行信息等

IntermediateResult

节点的每个输出链对应一个IntermediateResult,每个IntermediateResult下按ExecutionJobVertex的并行度对应有相应的IntermediateResultPartition。

SlotSharingGroup

定义不同节点的任务可以部署到同一个slot中,对slot进行共享,更为有效的使用slot资源。

ExecutionGraph生成

ExecutionGraph是Scheduler(JobManager中的负责调度处理的类)中实例化时通过调用createAndRestoreExecutionGraph方法来生成ExecutionGraph的。其最终调用的是DefaultExecutionGraphBuilder类中的buildGraph()方法。其具体流程如下:

  • 创建一个DefaultExecutionGraph的实例,这里主要是传入一些参数处理,并没有关联JobGraph的信息;
  • 初始化JobVertex,处理inputoutput的格式信息;
  • 将JobGraph的所有JobVertex进行按依赖顺序进行排序处理;
  • 调用ExecutionGraph的attachJobGraph方法将JobVertex列表信息绑定到ExecutionGraph
    每一个ExecutionJobVertex对应一个JobVertex,每一个IntermediateResult对应到一个JobVertex的IntermediateDataSet,再根据JobVertex的并行度生成对应数量的ExecutionVertex,用数组存储
    根据JobVertex的inputs信息初始化ExecutionJobVertex的inputs信息。
  • 配置statebackend和checkpoint信息,此部分留到介绍checkpoint时再详细介绍

总结

本篇接着01-DataStream基础介绍了JobGraph到ExecutionGraph的转换过程。首先介绍了ExecutionGraph中的相关核心概念,如ExecutionJobVertex、IntermediateResult等。后面介绍了ExecutionGraph的详细生成过程。

在ExecutionGraph生成的最后会设置checkpoint等信息,此块后面单独介绍。ExecutionGraph生成好后,会通过DefaultScheduler的startScheduling()方法来触发进行调度(具体调度及运行后面介绍),更多关于Flink ExecutionGraph生成的资料请关注脚本之家其它相关文章!

相关文章

  • Java线程取消的三种方式

    Java线程取消的三种方式

    文章介绍了 Java 线程取消的 3 种方式,不推荐使用 stop 方法和 volatile 设标记位停止线程,线程中断机制是协作式的,一个线程请求中断,另一线程响应,线程可检查自身中断状态或捕获 InterruptedException 来合适处理以响应中断,确保安全有序停止,避免资源泄露等问题
    2024-12-12
  • 深入浅析Java 虚拟线程

    深入浅析Java 虚拟线程

    Java21引入了虚拟线程,这是一种轻量级线程,适用于IO密集型的应用,可以极大提高应用的性能和吞吐量,虚拟线程是由传统线程执行的,由JVM控制上下文切换,创建和销毁的开销小,适用于高并发场景,本文介绍Java 虚拟线程的相关知识,感兴趣的朋友跟随小编一起看看吧
    2025-02-02
  • 利用Java搭建个简单的Netty通信实例教程

    利用Java搭建个简单的Netty通信实例教程

    这篇文章主要给大家介绍了关于如何利用Java搭建个简单的Netty通信,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-05-05
  • IDEA 自动生成 JPA 实体类的图文教程

    IDEA 自动生成 JPA 实体类的图文教程

    这篇文章主要介绍了IDEA 自动生成 JPA 实体类的图文教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • SpringBoot整合JWT框架,解决Token跨域验证问题

    SpringBoot整合JWT框架,解决Token跨域验证问题

    Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).定义了一种简洁的,自包含的方法用于通信双方之间以JSON对象的形式安全的传递信息。
    2021-06-06
  • Java中并行执行任务的多种方式

    Java中并行执行任务的多种方式

    在Java编程中,经常会遇到需要并行执行任务的情况,特别是在处理大量数据或者需要异步处理的场景下,本文将介绍几种常用的并行执行任务的方式,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2024-04-04
  • 一文了解MyBatis Plus批量数据插入功能

    一文了解MyBatis Plus批量数据插入功能

    mybatisPlus底层的新增方法是一条一条的新增的,下面这篇文章主要给大家介绍了MyBatis Plus批量数据插入功能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-09-09
  • SpringBoot如何自动生成API文档详解

    SpringBoot如何自动生成API文档详解

    网络程序正朝着移动设备的方向发展,前后端分离、APP,最好的交互交互方式莫过于通过API接口实现,这篇文章主要给大家介绍了关于SpringBoot如何自动生成API文档的相关资料,需要的朋友可以参考下
    2021-07-07
  • Java事务管理学习之JDBC详解

    Java事务管理学习之JDBC详解

    这篇文章主要介绍了Java事务管理学习之JDBC的相关资料,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • Spring Boot部署到Tomcat过程中遇到的问题汇总

    Spring Boot部署到Tomcat过程中遇到的问题汇总

    这篇文章主要给大家分享了关于Spring Boot部署到Tomcat过程中遇到的一些问题,文中将解决的方法介绍非常详细,对同样遇到这个问题的朋友具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03

最新评论