Flink作业调度

Flink作业调度

1.如何进行作业调度

实际上作业调度可以看作是对资源和任务进行匹配的过程。在Flink中,资源是通过slot来表示的,每个slot可以用来执行不同的Task。调度的主要目的就是为了给Task找到匹配的slot。
在这里插入图片描述该图表示的就是flink的作业调度过程,从图中我们可以清晰的看出来一个作业的整个提交调度过程。
master-slave:
AM(AppMaster):master,负责管理整个集群中的资源和作业。
TaskExecutor:slave,负责提供具体的资源并实际执行作业。
Master部分包含3个组件:Dispatcher、ResourceManager和JobManager
(1)Dispatcher负责接收用户提交作业,并且负责为这个新提交的作业拉起一个新的JobManager组件。
(2)ResourceManager负责资源管理。
(3)JobManager负责管理作业的执行,在一个Flink集群中可能有多个作业同时执行,每个作业都有自己的JobManager组件。
作业调度的整个流程:
1.用户提交作业,提交作业会首先启动一个Client进程负责作业的编译和提交。它首先将用户编写的代码编译为一个JobGraph。(还会进行一些检查或者优化工作,例如判断哪些Operator可以Chain到同一个Task中)然后将JobGraph提交到集群中执行,这个时候需要判断当前模式,
(1)若类似Standalone Session模式,AM会预先启动,Client直接与Dispatcher建立连接并提交作业即可。
(2)若是Per-Job模式,AM不会预先启动,Client首先向资源管理系统(如Yarn)申请资源来启动AM,再向Dispatcher提交作业。
以上步骤对应图中的前3步。
2.当作业提交到Dispatcher后,Dispatcer会首先启动一个JobManager组件。图中第4步。
3.JobManager会向ResourceManager申请资源来启动作业中的具体任务。这个时候要看TaskExecutor是否启动。
(1)若类似Standalone Session模式,则RM中已有TaskExecutor注册的资源,可以直接选择空闲的资源进程进行分配。
(2)若是Per-Job模式,RM首先向外部资源管理系统申请启动TM。
对应图中的5,6,7步。
4.RM选择空闲的slot后,通知TM,然后TaskExecutor进行相应的记录后,会向JM进行注册。JM收到TaskExecutor注册的slot后,可以实际提交Task。对应图中的8,9,10步。
5.TM收到JM提交的Task后,会启动一个新的线程,Task启动后,就可以进行预先指定的计算,Task之间可以Shuffle交换数据。

下面解释一下上面提到的两种模式的区别:
(1)Per-Job:独享Dispatcher和ResourceManager,按需要申请资源,适合执行时间较长的大作业。
(2)Session:共享Dispatcher和ResourceManager,共享资源,适合规模小,执行时间短的作业。

2.Flink中按什么顺序调度Task?

Flink调度中总共有两种调度顺序,一种是Eager调度,一种是LAZY_From_Source调度。
(1)Eager调度会在作业启动时申请资源将所有的Task调度起来,主要用来调度可能没有中止的流作业。(Task正常情况下不存在退出结束的行为)
(2)LAZY_From_Source调度是从source开始,按拓扑排序来进行调度,会先调度没有上游任务的source任务。当这些任务完成时,它会将输出数据缓存到内存或者写入磁盘中。对于后续任务,它的前驱任务全部执行完成后,Flink就会将这些任务调度起来。
在这里插入图片描述

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值