Flink资料(5) -- Job和调度

该文档翻译自Jobs and Scheduling

-----------------------------------------------
该文档简单描述了Flink是如何调度Job的,以及如何在JobManager上表现并跟踪Job状态。

一、调度

Flink通过任务槽(Task Slot)定义执行资源。每个TaskManager都有一或多个任务槽,每个任务槽都可以运行一个流水线并行任务。一个流水线包括多个连续的任务,如一个MapFunction的第n个并行实例与一个ReduceFunction的第n个并行实例的连续任务。注意,Flink通常会并发执行连续的任务,对于流数据程序来说,任何情况都如此执行;而对批处理程序,多数情况也如此执行。

 

1中是具有一个数据源、一个MapFunction和一个ReduceFunction的程序。数据源和MapFunction的执行并发度都为4,而ReduceFunction的执行并发度为3。在图1中,程序以Source-Map-Reduce的执行顺序,在具有2TaskManager的集群上运行,每个TaskManager都有3个任务槽,则程序执行情况图所述。

 

1Flink并发运行和SlotSharing

 

Flink内通过SlotSharingGroupCoLocationGroup来定义任务在共享任务槽的行为,可定义自由共享,或是严格定义某些任务部署到同一个任务槽中。

二、JobManager数据结构

Job执行期间,JobManager将持续耿总分布式任务的执行,来决定什么时候调度下一个/下一批问题,并且对完成的或失败的任务进行响应。

 

JobManager接收JobGraphJobGraph是数据流的表现形式,包括OperatorJobVertex)和中间结果(intermediateDataSet)。每个Operator都有诸如并行度和执行代码等属性。此外,JobGraph拥有一些附加的库,这些库都是在Operator执行代码时所需要的。

 

JobManagerJobGraph转换为ExecutionGraphExecutionGraphJobGraph的并行版本:对每个JobVertex,它针对每个并行子任务都有一个ExecutionVertex。一个并行度为100Operator将拥有一个JobVertex100ExecutionVertexExecutionVertex会跟踪其特定子任务的执行状态。来自一个JobVertex的所有ExecutionVertex都由一个ExecutionJobVertex管理,ExecutionJobVertex跟踪Operator总体的状态。除了这些节点之外,ExecutionGraph同样包括了IntermediateResultIntermediateResultPartition,前者跟踪IntermediateDataSet的状态,后者跟踪每个它的partition的状态。

 

2 JobGraph(Vertex) - ExecutionGraph(Vertex)

 

在程序执行期间,每个并行任务要经过多个阶段,从createdfinishedfailed。图3为各个状态以及它们之间可能的转换。一个任务可能被多次执行(如在失效恢复的过程中),所以我们以一个Exection跟踪一个ExecutionVertex。每个ExecutionVertex都有一个当前Executioncurrent execution)和一个前驱Executionprior execution)。

 

3 执行阶段及跳转

 

posted @ 2016-07-12 22:46  张安  阅读(1306)  评论(0编辑  收藏  举报