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分配、任务调度)。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM