Flink 任务提交

概述

这张图表明了flink是如何看待用户的处理流程的:抽象化为一系列operator,以source开始,以sink结尾,中间的operator做的操作叫做transform,并且可以把几个操作串在一起执行。


image_1cae39t06eoo3ml1be8o0412c69.png-43.5kB



什么是operator?

在源码中,我们可以看到一个flatMap算子,最终会被转化成一个operator,下图是flatMap被转化成一个 operator。

image

下图是map转化成一个 operator。

image

我们可以认为用户使用的各种算子,最终都是转化成一个 operator。


多个operator如何排序组合

Flink采用了类似责任链模式的方式对operator进行组合,责任链模式下,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。具体参见:https://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html


程序什么时候运行

在编写代码的时候,不管是flatMap还是map等算子的使用,都是将operator注册到环境中,并没有开始执行任务。当用户调用execute方式的时候,程序才开始准备执行。

env.execute("word count")

这里面主要做了两件事情,一件事情是根据上面配置的责任链模式将生成StreamGraph,即程序的拓扑结构图。另外一件事情就是生成JobGraph,也就是task list。

接下来的事情就比较好理解了,回到了客户端提交任务到服务端的模式。服务端接收到我们的任务信息,先放入任务队列、然后执行任务(申请资源、task分配、任务调度)。
posted @ 2019-05-08 10:55  春江师兄  阅读(5553)  评论(0编辑  收藏  举报