亲宝软件园·资讯

展开

Flink ExecutionGraph生成源码解析

xiangel 人气:0

引言

前面我们在介绍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()方法。其具体流程如下:

总结

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

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

加载全部内容

相关教程
猜你喜欢
用户评论