Flink入门教程--Jobs and Scheduling(任务和调度)
来源:互联网 发布:linux exec用法 编辑:程序博客网 时间:2024/05/21 17:39
原谅链接:https://ci.apache.org/projects/flink/flink-docs-release-1.3/internals/job_scheduling.html#jobs-and-scheduling
该文档简单描述了Flink是如何调度Job的,以及如何在JobManager上表现并跟踪Job状态。
调度
Flink通过任务槽(Task Slot)定义执行资源,每个TaskManager都有一或多个任务槽,每个任务槽都可以运行一个并行任务流,一个流包括多个连续的任务,例如一个MapFunction的第n个并行实例与一个ReduceFunction的第n个并行实例的连续任务。注意,Flink通常会并发执行连续的任务,对于Streaming 程序来说,任何情况都如此执行;而对于batch 程序,多数情况也如此执行。
下图举例说明。由一个data source、一个MapFunction和一个ReduceFunction组成的程序,data source和MapFunction的并发度都为4,而ReduceFunction的并发度为3。一个数据流由Source-Map-Reduce的顺序组成,在具有2个TaskManager,每个TaskManager都有3个Task Slot的集群上运行,则程序执行情况如图所述。
Flink内通过SlotSharingGroup和CoLocationGroup来定义哪些task共享一个task slot,也可以自定义某些task部署到同一个task slot中。
JobManager数据结构
在job执行期间,JobManager会持续跟踪分布式任务,来决定什么时候调度下一个task(或者tasks),并且对完成的或执行失败的任务进行响应。
JobManager接收JobGraph,JobGraph是数据流的表现形式,包括Operator(JobVertex)和中间结果(intermediateDataSet)。每个Operator都有诸如并行度和执行代码等属性。此外,JobGraph还拥有一些在Operator执行代码时所需要的附加库。
JobManager将JobGraph转换为ExecutionGraph,ExecutionGraph是JobGraph的并行版本:对每个JobVertex,它的每个并行子任务都有一个https://d.docs.live.net/72f746bc85b3dbdf/%E6%96%87%E6%A1%A3/Flink/Documents.one“>ExecutionVertex。一个并行度为100的Operator将拥有一个JobVertex和100个ExecutionVertex。ExecutionVertex会跟踪其特定子任务的执行状态。来自一个JobVertex的所有ExecutionVertex都由一个ExecutionJobVertex管理,ExecutionJobVertex跟踪Operator总体的状态。除了这些节点之外,ExecutionGraph同样包括了IntermediateResult和IntermediateResultPartition,前者跟踪IntermediateDataSet的状态,后者跟踪每个它的partition的状态。
每个ExecutionGraph具有与其相关联的作业状态。此作业状态指示作业执行的当前状态。
Flink job首先处于创建状态,然后切换到运行状态,并且在完成所有工作后,它将切换到完成状态。在失败的情况下,job切换到第一个失败点,即取消所有正在运行任务的地方。如果所有job节点都已达到最终(或者说不可更改)状态,并且job不可重新启动,则job将转换为失败。如果作业可以重新启动,那么它将进入重新启动状态。一旦完成重新启动,它将变成创建状态。
在用户取消作业的情况下,将进入取消状态 ,这需要取消所有当前正在运行的任务。一旦所有运行的任务已经达到最终(或者说不可更改)状态,该作业将转换到已取消状态。
与完成状态不同,取消状态和失败状态表示一个全局的终端状态,并且触发清理工作,而暂停状态仅处于本地终端上。本地终端意味着job的执行已在相应的JobManager上终止,但Flink集群的另一个JobManager可以从持久的HA存储中恢复这个job并重新启动。因此,处于暂停状态的job将不会被完全清理。
在执行ExecutionGraph期间,每个并行任务经过多个阶段,从创建到完成或失败 ,下图说明了它们之间的状态和可能的转换。任务可以执行多次(例如故障恢复)。所以,一个Execution跟踪一个ExecutionVertex的执行,每个ExecutionVertex都有一个当前Execution(current execution)和一个前驱Execution(prior execution)。
- Flink入门教程--Jobs and Scheduling(任务和调度)
- Spring任务调度Scheduling Tasks
- 任务调度(Task Scheduling)
- Spring任务调度Scheduling Tasks
- State in Flink and Rescaling Stateful Streaming Jobs
- Scheduling Jobs by crontab
- 决策理论(Decision theory)&自动规划和调度(Automated planning and scheduling)(双语)
- flink入门教程
- laravel Task Scheduling(任务调度)在windows下的使用
- Flink入门教程--Task Lifecycle(任务的生命周期简介)
- Quartz.net基于数据库的任务调度管理(Only.Jobs)
- Spring中的定时调度(Scheduling)和线程池(Thread Pooling)
- Spring中的定时调度(Scheduling)和线程池(Thread Pooling)
- Spring中的定时调度(Scheduling)和线程池(Thread Pooling)
- Spring中的定时调度(Scheduling)和线程池(Thread Pooling)
- Spring中的定时调度(Scheduling)和线程池(Thread Pooling)
- Disk Scheduling 磁盘调度
- Scheduling (调度)相关
- 213. House Robber II
- UITableView 基本使用方法 iOS的listview
- php正则去除文章页标签范例
- laravel Task Scheduling(任务调度)在windows下的使用
- IMPDP命令
- Flink入门教程--Jobs and Scheduling(任务和调度)
- 笔记:linux下查询网络端口被监听的信息方法。
- spfa算法
- 解决jsp上传文件,重启tomcat后文件和文件夹自动删除
- CodeForces 723C Polycarp at the Radio (贪心+暴力)
- think in java第十六章数组 总结随笔
- diff.js 列表对比算法 源码分析
- HDU 6199 gems gems gems dp
- org.mybatis.spring.MyBatisSystemException