Flink提交作业流程图
2023-09-26 16:30:15 0 举报
学习笔记
作者其他创作
大纲/内容
TaskManager
4.请求slot
分割线
YARN ResourceManager
8.分发任务
资源管理器
客户端
1.提交任务
3.请求slots
4.启动
5.注册Slots
6.发出提供slot命令
1.请求容器
会话模式:span style=\
7.执行任务
JobManager
7.提供slots
YARN资源管理器
YARN模式下提交作业(动态分配TaskManager⭐)
分发器
2.启动JobMaster
Standalone集群下流程(预先固定TaskManager个数⭐)
2.启动JobManager
ResourceManager
JobMaster
4.请求容器
步骤如下:1.客户端将jar包程序 --> DataFlow Graph --> JobGraph,然后将JobGraph通过分发器提供的 rest 接口将作业提交给JobManager。2.然后分发器启动 JobMaster,并将JobGraph提交给 JobMaster。3.JobMaster 将 JobGraph 解析为可执行的 ExecutionGraph,计算所需的资源数量,然后向ResourceManager请求资源(slots)。4.ResourceManager判断当前是否由足够的可用资源,转到第6步;如果没有,启动新的 TaskManager。5.TaskManager 启动之后,向 ResourceManager 注册自己的可用任务槽(slots)。ResourceManager通知 TaskManager 为新的作业提供 slots6.TaskManager 连接到对应的 JobMaster,提供 slots。7.JobMaster 将需要执行的任务分发给 TaskManager。8.TaskManager 执行任务,在执行过程中,TaskManager 可以缓冲数据,还可以跟其他运行同一应用的 TaskManager交换数据。
7.请求slot
5.注册slot
6.注册slot
6.提供slot
1.提交应用
5.启动带有TaskManager的容器
抽象流程
2.启动并提交应用
APP
步骤如下:1.客户端将jar包程序 --> DataFlow Graph --> JobGraph,然后将JobGraph通过分发器提供的 rest 接口将作业提交给JobManager。2.由分发器启动 JobMaster,并将 JobGraph 提交给 JobMaster。3.JobMaster 将 JobGraph 解析为可执行的 ExecutionGraph,计算所需的资源数量,然后向ResourceManager请求资源(slots)。4.ResourceManager判断当前是否由足够的可用资源,转到第6步;如果没有,ResourceManager 向 YARN ResourceManager 请求 container(容器) 资源。因为yarn集群是动态分配TaskManager,只要还有TaskManager能够启动且资源足够就能执行job因为yarn集群是动态回收TaskManager,因此,不会出现任务槽空闲的情况5.YARN 分配container 资源并启动新的 TaskManager 容器,一个container对应一个TaskManager6.TaskManager 启动之后,向 ResourceManager 注册自己的可用任务槽(slots)。7.ResourceManager通知 TaskManager 为新的作业提供 slots8.TaskManager 连接到对应的 JobMaster,提供 slots。9.JobMaster 将需要执行的任务分发给 TaskManager。10.TaskManager 执行任务,在执行过程中,TaskManager 可以缓冲数据,还可以跟其他运行同一应用的 TaskManager交换数据。
9.执行任务
Dispatcher(分发器)
单作业模式:1.不需要预先启动jobManager,job提交时会自动启动2.发生job请求时的处理流程:和上面的会话模式一样注意:可见,单作业模式与会话模式只是JobManager 的启动时间点不一样,会话模式是预先启动,应用模式则是在作业提交时启动。
8.提供slot
应用模式:1.应用模式与单作业模式的提交流程一样,只是初始提交给 YARN ResourceManager的不再是具体的作业,而是整个应用。所以 程序–>DataFlowGraph–>JobGraph发生在jobMaster中而不是客户端中。注意: 一个应用中可能包含了多个job,这些job都将在 Flink 集群中启动各自对应的 JobMaster。
在Standalone集群下,只有会话模式和应用模式两种部署方式。两者的流程一样:1.客户端将jar包程序 --> DataFlow Graph --> JobGraph,然后将JobGraph通过分发器提供的 rest 接口将作业提交给JobManager。2.然后分发器启动 JobMaster,并将JobGraph提交给 JobMaster。3.JobMaster 将 JobGraph 解析为可执行的 ExecutionGraph,计算所需的资源数量,然后向ResourceManager请求资源(slots)。4.ResourceManager判断当前是否由足够的可用资源;如果没有,则不能执行该job,发出资源不足的异常因为预先固定TaskManager个数,不足就会失败因为预先固定TaskManager个数,不可动态分配也不可回收,所以可能出现任务槽空闲的情况5.ResourceManager通知 TaskManager 为新的作业提供 slots。6.TaskManager 连接到对应的 JobMaster,提供 slots。7.JobMaster 将需要执行的任务分发给 TaskManager。8.TaskManager 执行任务,在执行过程中,TaskManager 可以缓冲数据,还可以跟其他运行同一应用的 TaskManager交换数据。两者的区别:还是JobManager 的启动时间点不一样,会话模式是预先启动,应用模式则是在作业提交时启动。
收藏
收藏
0 条评论
下一页