购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.2 作业提交流程

了解了Flink运行时的基本组件和系统架构,我们再来梳理一下作业提交的具体流程。

4.2.1 高层级抽象视角

Flink的提交流程随着部署模式、资源管理平台的不同,会有不同的变化。首先我们从一个高层级的视角,来做一下抽象提炼,看一看作业提交时宏观上各组件是怎样交互协作的。作业提交流程如图4-2所示。

图4-2 作业提交流程

(1)在一般情况下,由客户端(App)通过分发器提供的REST接口,将作业提交给JobManager。

(2)由分发器启动JobMaster,并将作业(包含JobGraph)提交给JobMaster。

(3)JobMaster将JobGraph解析为可执行的ExecutionGraph,得到所需的资源数量,然后向资源管理器请求任务槽资源。

(4)资源管理器判断当前是否有足够的可用资源;如果没有,启动新的TaskManager。

(5)TaskManager启动之后,向ResourceManager注册自己的可用任务槽。

(6)资源管理器通知TaskManager为新的作业提供slots。

(7)TaskManager连接到对应的JobMaster,提供slots。

(8)JobMaster将需要执行的任务分发给TaskManager。

(9)TaskManager执行任务,互相之间可以交换数据。

如果部署模式不同,或者集群环境不同(如Standalone、YARN、K8s等),其中一些步骤可能会不同或被省略,也可能有些组件会运行在同一个JVM进程中。比如我们在上一章实践过的独立集群环境的会话模式,就需要先启动集群,如果资源不够,只能等待资源释放,而不会直接启动新的TaskManager。

接下来,我们就具体介绍一下不同部署环境下的提交流程。

4.2.2 独立模式

在独立模式(Standalone)下,只有会话模式和应用模式两种部署方式。两者整体来看流程是非常相似的:TaskManager都需要手动启动,所以当ResourceManager收到JobMaster的请求时,会直接要求TaskManager提供资源;而JobMaster的启动时间点,会话模式是预先启动的,应用模式则是在作业提交时启动的。Standalone集群作业提交流程如图4-3所示。

图4-3 Standalone集群作业提交流程

我们发现,除去第4步不会启动TaskManager,而且直接向已有的TaskManager要求资源,其他步骤与4.2.1节所讲的抽象流程完全一致。

4.2.3 YARN集群

接下来我们再看一下有资源管理平台时,具体的提交流程。我们以YARN为例,分不同的部署模式来做具体说明。

1.会话模式

在会话模式下,我们需要先启动一个YARN Session,这个会话会创建一个Flink集群。

这里只启动了JobManager,而TaskManager可以根据需要动态地启动。在JobManager内部,由于还没有提交作业,所以只有ResourceManager和Dispatcher在运行,如图4-4所示。

图4-4 YARN Session模式下收到容器请求

接下来就是真正提交作业的流程,如图4-5所示。

(1)客户端通过REST接口,将作业提交给分发器。

(2)分发器启动JobMaster,并将作业(包含JobGraph)提交给JobMaster。

(3)JobMaster向资源管理器请求资源。

(4)资源管理器向YARN的资源管理器请求container资源。

(5)YARN启动新的TaskManager容器。

(6)TaskManager启动之后,向Flink的资源管理器注册自己的可用任务槽。

(7)资源管理器通知TaskManager为新的作业提供slots。

(8)TaskManager连接到对应的JobMaster,提供slots。

(9)JobMaster将需要执行的任务分发给TaskManager,执行任务。

图4-5 YARN集群作业提交流程

可见,整个流程除了请求资源时要“上报”YARN的资源管理器,其他与4.2.1节所讲的抽象流程几乎完全一样。

2.单作业模式

在单作业模式下,Flink集群不会预先启动,而是在提交作业时,才启动新的JobManager,具体流程如图4-6所示。

图4-6 Per-Job模式作业提交流程

(1)客户端将作业提交给YARN的资源管理器,这一步中会同时将Flink的jar包和配置上传到HDFS,以便后续启动Flink相关组件的容器。

(2)YARN的资源管理器分配容器资源,启动Flink JobManager,并将作业提交给JobMaster。这里省略了Dispatcher组件。

(3)JobMaster向资源管理器请求资源。

(4)资源管理器向YARN的资源管理器请求容器。

(5)YARN启动新的TaskManager容器。

(6)TaskManager启动之后,向Flink的资源管理器注册自己的可用任务槽。

(7)资源管理器通知TaskManager为新的作业提供slots。

(8)TaskManager连接到对应的JobMaster,提供slots。

(9)JobMaster将需要执行的任务分发给TaskManager,执行任务。

可见,区别只在于JobManager的启动方式,以及省去了分发器。在第2步作业提交给JobMaster,之后的流程就与会话模式完全一样了。

3.应用模式

应用模式与单作业模式的提交流程非常相似,只是初始提交给YARN资源管理器的不再是具体的作业,而是整个应用。一个应用中可能包含了多个作业,这些作业都将在Flink集群中启动各自对应的JobMaster。 kzbEO4R2vh6kEtO9G9pSPWAswLkGraPQn5Sh3Jl7r+g+aJnKvU7Rg+dp0i2VcvN8

点击中间区域
呼出菜单
上一章
目录
下一章
×