zoukankan      html  css  js  c++  java
  • 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 执行阶段及跳转

  • 相关阅读:
    还需要做恰当的解读,此时你可能需要一些书:
    创业公司的架构演进史
    任务调度平台Cuckoo-Schedule
    ORACLE中死锁
    Action的模型绑定
    三次握手、四次握手、backlog
    Django框架
    扩展BootstrapTable的treegrid功能
    Identity Service
    Linux权限
  • 原文地址:https://www.cnblogs.com/lanyun0520/p/5665211.html
Copyright © 2011-2022 走看看