本人已参与 「新人创作礼」活动,一起开启掘金创作之路。
一.整体构成
JobManager(作业管理器):“管理者”(Master),负责管理和调度,不考虑高可用只能有一个。
TaskManager(任务管理器): “工作者”(Worker),负责执行任务处理数据,可以有一个和多个。
客户端:只负责作业的提交。
1.1 JobManager(作业管理器)
1.1.1 JobMaster
负责处理单独的作业Job,和Job一一对应,多个Job可以同时运行在一个集群中;在作业提交时,JobMaster先接收客户端提交的应用:包括jar包,数据流图(dataflow graph)和作业图(JobGraph)。 JobMaster会把JobGraph成一个数据流图称之为执行图,包含所有可以并发执行的任务,向资源管理器(RM)发出请求,申请资源,获取到足够资源后,将执行图分发到TaskManager上。
1.1.2 ResourceManager(资源管理器)
负责资源的分配和管理,在Flink集群中只有一个,资源就是指TaskManager的任务槽(task slots),任务槽就是资源调配单元,包含了执行计算的CPU和内存资源。
Standalone模式:TaskManager单独启动,所以RM只能分发可用的TM任务槽,不能单独启动新的TM。 有资源管理平台:RM会将有空闲槽的TM分给JobMaster,如果槽不够,还可以向资源平台发起会话,请求提供启动TM的容器;此外,RM还负责停止空闲的TM,释放计算资源。
1.1.3 TaskManager(任务管理器)
TaskManager时Flink的工作进程,集群中至少有一给TM,每一个都包含一定数量的任务槽;启动之后,TM会向RM注册他的slots,收到RM的指令后,TM会将一个或多个槽位提供给JobMaster调用。
二.作业提交流程
1.客户端通过分发器提供的接口,将作业提交给JobManager。 2.由分发器启动JobMaster,并将作业提交给JobMaster。 3.JobMaster将JobGraph解析为可执行的ExecutionGraph,得到所需的资源数量,然后向RM请求slots。 4.RM判断当前的可用资源是否足够,不够启动新的TaskManager。 5.TM启动之后,向RM注册自己的slots。 6.RM通知TM为新的作业提供slots。 7.TM连接到对应的JobMaster,提供slots。 8.JobMaster将需要执行的任务分发给TM。 9.TM执行任务,互相之间交换数据。
部署模式不用,其中一些步骤可能也会不同。