Flink作业提交流程

125 阅读3分钟

作业提交流程

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

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

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

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

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

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

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

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

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

独立模式

独立模式下,由于TaskManager 是手动启动的,所以当 ResourceManager 收到 JobMaster 的请求时,会直接要求 TaskManager 提供资源,因此第(4)步与提交流程不同,不会启动新的TaskManager

YARN模式

会话模式

在会话模式下,YARN session创建Flink集群

作业提交流程如下:

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

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

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

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

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

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

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

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

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

可以看到在YARN的session模式下,请求资源时要“上报”YARN 的资源管理器

单作业模式

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

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

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

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

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

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

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

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

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

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

应用模式

应用模式与单作业模式的区别在于:初始时提交给YARN资源管理器的不是一个作业,而是一个应用,应用中可以包含多个作业,每个作业都会启动相应的JobMaster;