https://www.bilibili.com/video/BV1zr4y157XV?p=21&vd_source=51f694f71c083955be7443b1d75165e0
看到4:12,继续他说一句,记一句。
1、客户端将程序转换成数据流图(作业图),将提交给jobManager:
程序在客户端进行转换:经过优化器和图的构建器,得到数据流图(作业图),之后客户端把这个数据流图提交给jobManager。
客户端可以和jobManager保持通信,获取jobManager那边的状态更新、计算结果。但是任务的实际执行和客户端已经没有关系了。
2、jobManager将数据流图进行详细分析、转化,转换成一个最终可以执行的执行图,将可执行的【作业?任务】分发给TaskManager。
他有自己的通信系统:actor,可以和所有的taskManager进行通信。另外他可以进行作业的调度(作业调度器),和检查点的协调(检查点协调器)。
3、TaskManager
把所有的任务拆分开,放到对应的Task Slot上执行。
任务槽:执行一个任务所需的最小资源,每一个slot可以执行一个单独的任务。
不同的TaskManager上有多个slot,就可以并行执行多个任务。
在执行的过程中TaskManager间是有数据交换的。图中的数据流是指在TaskManager之间的数据流动。
每个TaskManager中会有内存和IO的管理器、网络的管理器(用来进行网络通信)、有自己的通讯系统(actor)。
TaskManager在执行任务的过程中还会跟JobManager有交互,它会给JobManager发送心跳,返回自己的状态和统计指标的监控信息。
JobManager可以向TaskManager发送一些部署、停止、触发检查点的命令。
点cancel来停止一个作业:从webUI或客户端提交了取消应用的指令给JobManager,然后JobManager再通知所有的TaskManager取消当前的Task。