一、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时的