1. 会话模式(Session Mode)
1.1 描述
在会话模式下,首先启动一个Yarn Session,这个会话会创建一个Flink集群,此时只是启动了JobManager,TaskManage是根据提交的作业动态的进行启动。
1.2 会话模式下的作业提交流程
(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,执行任务。
2. 单作业模式(Per-Job Mode)
2.1 描述
在单作业模式下,Flink集群不会预先启动,而是在提交作业时,才启动新的JobManage,客户端运行程序会为每个作业启动一个集群
2.2 单作业模式下的作业提交流程
(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,执行任务