flink的执行原理猜想
作者:互联网
一,flink的架构,flink的组件和各自的作用
- client:根据job生成流图StreamGraph,优化流图生成Job图JobGraph,在这个过程中,会将一些算子合并组成operator chain,提交Job到集群。
- JobManager:接收Job,使用Job Master将JobGraph转换为ExecutionGraph,向ResouceManager申请资源,根据ExecutionGraph将任务分配给TaskManager,监控任务的执行;根据设置启动检查点机制;job的故障恢复;
- TaskManager:以Taskslot为单位提供计算资源,执行JobManager分配的任务,向JobManager汇报任务状态。
二,flink的基本概念
三,作业的执行流程:作业提交、作业调度、作业执行
要想搞清楚我们开发的作业是怎么执行的,首先要把四张图(StreamGraph、JobGraph、ExecutionGraph、物理执行图)弄明白。
前三种图都是flink的数据结构,在源码中分别由三个类与之对应。物理执行图是对运行时作业的一种理解和抽象,在源码中并不存在与之对应的数据结构。
1,StreamGraph
clint将任务中使用的算子按照一定的规则组织成StreamGraph,从逻辑上不难理解,代码中使用的算子都被存储在一个list中,clint执行时会将list中的算子一一取出,按先后顺序连接起来,组成一个链式图。图由StreamNode和StreamEdge构成。
- StreamNode:由算子转换而来,但并非所有算子都会转换为StreamNode,比如分区函数、keyBy函数,keyBy会被转换为一个hash类型的StreamEdge。
- StreamEdge代表前后相连的算子之间的数据交换方式:Rebalance(轮询)、shuffle(随机)、rescale、broadcast、hash。
2,JobGraph
JobGraph是在客户端由StreamGraph转换而来。
- StreamNode转换为JobVertex
- StreamEdge转化为JobEdge
- 算子的输出称之为IntermediateDataSet
- JobGraph还进行了一项优化:将符合条件的算子组成operator chain,一个operator chain也是一个JobVertex,也就是说一个JobVertex可能包含多个算子
JobGraph和StreamGraph都是简单的图结构。
3,ExecutionGraph
任务提交到集群后,JobManager根据JobGraph生成ExecutionGraph。
ExectionGraph是对JobGraph的展开,加入了并行度。
JobManager根据ExecutionGraph向resourceManager申请资源,此时作业所需要的资源已经确定。
- JobVertext 转换为ExecutionJobVertex,ExecutionJobVertex维护者一个ExecutionVertex数组,数组的长度是当前算子的并行度
- ExecutionVertex就是子任务,以ExecutionVertex为单位分配Taskslot
- IntermediateDataSet转换为IntermediateResult,一个IntermediateResult由多个IntermediateResultPartition构成,代表算子的输出。
- JobEdge转换为ExecutionEdge,其数量由上游算子和下游算子的并行度共同决定
JobManager遍历ExecutionGraph中的任务,将其分配到申请的资源,并记录和跟踪任务的执行
4,物理执行图
物理执行图和任务的执行没有关系,是为了理解任务的实际执行过程抽象出来的虚构图。
- 一个ExecutionVertex转换为一个Task
- IntermediateResult转换为ResultPartition
- 一个IntermediateResult转换为一个ResultSubPartition
- 一个ExecutionEdge转换为一个InputCHannel
4,有状态的计算
5,checkpoint
6,水位线
7,端到端的一致性
8,内存管理
首先flink根据JobGraph生成ExecutionGraph,ExecutionGraph有并行度信息,每个task的并行度信息,在哪个taskslot上执行,下游算子的联系方式,输出数据的存放位置。 下游算子从指定的存储位置读取数据。
上游算子的数据如果需要重分区,则会根据重分区规则将数据发送到其他taskslot的指定位置。
标签:ExecutionGraph,猜想,StreamGraph,flink,JobGraph,算子,原理,执行,转换 来源: https://blog.csdn.net/epitomizelu/article/details/117572413