00:00
天为止,我们其实已经把flink的运行式架构已经梳理的非常清楚了,已经知道怎么样提交,然后怎么样把原始的程序转换成最后要执行的任务,那现在我们做一个总结,这个总结呢,就是最终job manager生成的那个,我们管它叫做执行图execution graph,它最后相当于就可以分发给task manager,告诉他们怎么样去执行任务啊,所以这部分其实是非常重要,那在弗link里边它的所谓的执行环节的这个图啊,这个graph可以分成四层。这四层其实都是一种dag,都是一种有效无环图,只不过大家就会看到它拆开之后那个结构会有点不一样啊,那四层分别叫stream graph。Job graph execution execution graph和物理执行图就physical graph,那这几层里边啊,前面三个你看大家看我都是直接用英文了,因为它其实就是在这个代码里边有一个对应的类,那物理执行图当然就没后没有对应的类了,对吧?这这个代码层面的东西才有逻辑上的这个概念嘛,那那物理执行图其实就是最终在硬件上执行的一个过程了,这里我们可以分别解释一下,Stream graph stream stream graph其实就是直接我们用这个data stream API。
01:24
代码里边直接生成的那个最初的数据流图,所以有时候也会把它直接叫做data flow data flow graph啊,叫什么的都有啊,也有叫这个data flow stream graph啊,啊,那整体来讲就是它是最初的数据流图,表示了程序的拓扑结构,基本上里边每一个我们所说的这个数据的操作,数据的转换。转换方法就是一个算子流里边的一个算子节点。然后接下来呢,接下来就会做一个优化。Stream stream graph会经过优化生成一个job graph提交给job manager,那大家会发现就是这个优化主要是干什么呢?就是前面我们讲的。
02:09
合并算子点,符合条件的节点链接在一起,作为一个新的节点,这一步操作是在提交给job manager。之前就已经完成的,所以呢,呃,大部分场景下是这个客户端直接就就去做的,所以我们说一般情况除了这个应用模式啊,绘画模式和单作业模式都是由客户端去执行我们的。原始这个项目里边的main方法,然后去生成这个job gra,然后他会把它呃,通过dispat啊去去提交给这个job manager,然后接下来job manager里边的job master啊,就会根据这个job graph生成最终可执行的execu graph。那可执行的最大的特点是什么?就是并行化嘛,就是把按照并行度完全拆开,知道最后到底要执行的任务有多少个,有哪些,所以它是调度层最核心的数据结构,这个一知道了,那接下来我们要干什么活就完全清楚了,需要多少资源也就可以确定了。
03:14
啊,那最后的物理执行图,其实就是说John manager啊,把这个execution graph直接发下去,分配给这个task manager,那部署task之后,最终物理层面会也有一个啊,这个物理层面的一个图,这并不是一个具体的数据结构啊,只是我们最终执行的一个效果。那接下来我们可以看一看这几个图分别长什么样啊,让我们之前定义,呃,当然这这里的这个图就是我们真正的word count这个程序了啊,首先source读进来,然后是Fla map Fla map做一个转换,后边是K,之后做sub啊,做了一个聚合,最后是think。那大家这里看到了,South进来之后,这是一个,这是一个算子吗?Flat we是一个算子,Kid aggregation又是一个算子,Think又是一个算子,它们之间的传输关系是什么呢?啊,大家看,一开始S并行度是一,然后Fla map并行度是二,所以它的传输关系是re balance。
04:11
然后接下来到这个聚合,因为它做了K败,所以它的这个传输方式是基于哈希扣做了重分区啊,那大家知道这也是一个重分区操作啊,然后再接下来。KY之后聚合到这个最终输出,它是一个直传,这是一个forward啊,那这样的话,它俩并行度相同,我们知道可以合并算子链operator tree,它俩就合并成一个任务了,那生成的这个东西就叫做drop graph。这是根据代码最初生成的stream graph,接下来在这个客户端上啊,我们提交之前就可以生成这个drop graph,有了它之后,基于这个job graph,在job ma master上就可以直接生成这个执行图,执行图的区别在哪里?就是按照这个并行度直接展开,而且我可以知道接下来当前根据我们这个传输方式对吧?啊,确定这个每一步操作应该怎么样向下游任务去传输,这就是最终执行任务的这个,呃,要执行什么样的任务,然后执行完了之后怎么样朝下游传输,其实帕manager接到这个任务之后就知道该怎么做了,要干的活就都清楚了啊。
05:24
啊,那最后物理执行图的话,那其实就是把我们最终的这个东西要在这个物理层面再做一个拆开,对吧?啊,其实跟前面是差不多的啊,最核心的就是这个execution graph。所以整体来看的话,也都是一个DG,都是一个有向无环图。这就是一个总结,所以最终我们知道前面的这个word代码,如果我们提交的时候指定杠P参数。并行度射二,那么最终要执行的有五个任务对吧?呃,一个S任务,呃,两个Fla map任务,两个K之后聚合和think合并在一起的一个算子链的一个大的任务啊,所以是122加起来之后有五个任务,三步操作五个任务。
我来说两句