用户的任务会以job方式提交给集群,runtime负责整个作业的调度,支持各种作业方式。
简单的一个作业表单
实际上作业是:
这里就是逻辑图(JobVertex)和执行图(ExecutionVertex)的区别,虚线圈表示的是一个Operator chain(要求并发度一致,数据交换1对1)
按官网总结runtime图如下:
核心组件有JobMaster(管理作业),ResourceMnager(资源调度),TaskExecutor(任务执行器)。下面分别介绍作用:
一.Jobmaster功能:
1.作业生命周期的管理 2.任务的调度 3.出错恢复 4.作业状态查询 5.分布式快照(checkpoint和savepoint)
1.1作业的生命周期有正常流程(created,running,finshed),异常( restarting .failing,failed)用户操作(cancelling,canceled)以及其他
1.2任务调度(核心):根据调度策略(SchedulingStrategy)来控制调度的时机.细分为事件驱动(类如任务开始后,生命周期变化或者失败后重启);多种调度策略(流式策略(Eager),批次策略(lazy from sources)等)
正常调度过程如下:初始(created),申请资源(scheduled),开始部署(deploying),部署成功(running)
出错恢复过程: 停止相关任务,重置任务状态,通知调度策略重新调度,由出错恢复策略决定
二.任务运行容器(TaskExecutor)
分为资源模型,资源的子集
Task资源会被分配成一个个Task Slot(按数量均分)
Task Solt可以共享,但必须是同一个共享组(SlotSharingGroup)中的不同类型的(jobVertex)的任务,这样做是为了减少数据交换开销,方便用户资源配置和负载均衡
任务执行图(引用其他文档)
每个任务独占一个线程,任务从InputGate中读取数据,送到OperatorChain,OperatorChain再将数据输出到ResultPartition
三.资源管理
ResourceManager管理TaskExecuto,又必须向jobMaster注册,其下SlotManager 管理slot(通过心跳更新slot状态),所以一个slot申请流程是:JobMaster->resourceManager->taskExecutor->JM