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生成的资料请关注脚本之家其它相关文章!

相关文章

  • SpringMVC和Swagger整合方法

    SpringMVC和Swagger整合方法

    Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。下面通过本文给大家分享SpringMVC和Swagger整合方法,感兴趣的朋友一起看看吧
    2017-08-08
  • 详解Spring boot/Spring 统一错误处理方案的使用

    详解Spring boot/Spring 统一错误处理方案的使用

    这篇文章主要介绍了详解Spring boot/Spring 统一错误处理方案的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Mybatis注解增删改查的实例代码

    Mybatis注解增删改查的实例代码

    这篇文章主要给大家介绍了关于Mybatis注解增删改查的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • springboot的缓存技术的实现

    springboot的缓存技术的实现

    这篇文章主要介绍了springboot的缓存技术的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Java实现调用jython执行python文件的方法

    Java实现调用jython执行python文件的方法

    这篇文章主要介绍了Java实现调用jython执行python文件的方法,结合实例形式分析了Java调用jython执行python文件的常见操作技巧及相关问题解决方法,需要的朋友可以参考下
    2018-03-03
  • Java缩略图生成库之Thumbnailator应用说明

    Java缩略图生成库之Thumbnailator应用说明

    Thumbnailator是一个为Java界面更流畅的缩略图生成库,从API提供现有的图像文件和图像对象的缩略图中简化了缩略过程,两三行代码就能够从现有图片生成缩略图,使用起来非常方便,需要的朋友可以了解下
    2012-12-12
  • Java 执行CMD命令或执行BAT批处理方式

    Java 执行CMD命令或执行BAT批处理方式

    这篇文章主要介绍了Java 执行CMD命令或执行BAT批处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Spring中@Value设置默认值问题解决

    Spring中@Value设置默认值问题解决

    本文主要介绍了Spring中@Value设置默认值问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Java中的日期和时间类以及Calendar类用法详解

    Java中的日期和时间类以及Calendar类用法详解

    这篇文章主要介绍了Java中的日期和时间类以及Calendar类用法详解,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • 浅谈Java编程中string的理解与运用

    浅谈Java编程中string的理解与运用

    这篇文章主要介绍了浅谈Java编程中string的理解与运用,还是比较不错的,这里分享给大家,供需要的朋友参考。
    2017-11-11

最新评论