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的执行顺序,在具有2个TaskManager的集群上运行,每个TaskManager都有3个任务槽,则程序执行情况图所述。

图1Flink并发运行和SlotSharing

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

二、JobManager数据结构

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

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

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

图2
JobGraph(Vertex) - ExecutionGraph(Vertex)

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

图3 执行阶段及跳转

时间: 2024-10-14 04:34:28

Flink资料(5) -- Job和调度的相关文章

Flink资料(4) -- 类型抽取和序列化

类型抽取和序列化 本文翻译自Type Extraction and Serialization Flink处理类型的方式比较特殊,包括它自己的类型描述,一般类型抽取和类型序列化框架.该文档描述这些概念并解释其机理. Java API和Scala API处理类型信息的方式有根本性的区别,所以本文描述的问题仅与其中一种API相关 一.Flink中对类型的处理 一般处理类型时,我们并不干涉,而是让编程语言和序列化框架来自动处理类型.与之相反的,Flink想要尽可能掌握进出用户函数的数据类型的信息. 1

Flink资料(8) -- Flink代码贡献的指导及准则

本文翻译自Contributing Code ----------------------------------------- Apache Flink是由自愿的代码贡献者维护.优化及扩展的.Apache Flink社区鼓励任何人贡献源代码.为了使得代码贡献者及复查者之便利,以及保存高质量的代码基础,我们遵循着一个贡献代码的过程,该过程将在本文档中详细描述. 本文包括有关向Flink贡献代码所需知晓的所有事宜,描述了从前期准备,测试以及代码提交的过程,同时解释了代码编写的准则以及Flink基础

Flink资料(6) -- 如何添加一个新的Operator

false false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt

Flink入门(二)——Flink架构介绍

1.基本组件栈 了解Spark的朋友会发现Flink的架构和Spark是非常类似的,在整个软件架构体系中,同样遵循着分层的架构设计理念,在降低系统耦合度的同时,也为上层用户构建Flink应用提供了丰富且友好的接口. https://mmbiz.qpic.cn/mmbiz_png/mqibsuEhdUyIVKMN1mHneQiantTzuhJYqwSD0k9gn8RCcJZHeD19KxcLj8ydCUr9KuepDWu6fk2J47oKx6dyQlfQ/640?wx_fmt=png&wxfrom

Linux负载均衡软件LVS之一(概念篇)

一. LVS简介LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org.现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能.使用LVS技术要达到的目标是:通过LVS提

Linux负载均衡之lvs基本介绍

说到web集群,我们不能不说到lvs,众所周知lvs是一个很优秀的负载集群开源软件,相对于一些硬件负载,lvs有着很多出色的性能,比如廉价,稳定,支持大多数情况下的高并发应用场景,下面来给大家讲讲lvs的起源以及基本介绍 一.LVS概念 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器.这是一个由章文嵩博士发起的一个开源项目,它的官方网站是http://www.linuxvirtualserver.org/.现在LVS已经是Linux内核标准的一部分. 使用LV

手机管理中的应用【6】——电源管理篇

欢迎转载,转载请注明:http://blog.csdn.net/zhgxhuaa 说明 本篇将介绍省电管理篇.主要介绍一下Android的耗电情况和眼下市面上<电池助手>类应用涉及到的一些技术点. 本篇将对这些知识点做一下总结和分析.主要包含: A.       电池信息(耗电排行) B.       省电管理 C.       剩余可用时间估算等 耗电分析 手机耗电分析 以我的手机(小米2S)为例,首先来看一下我的手机的电池使用情况,例如以下图(在设置->电量中查看): waterma

linux 负载均衡技术之 LVS

一. LVS简介LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org.现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能. 使用LVS技术要达到的目标是:通过LVS

(转)Linux负载均衡软件LVS之一(概念篇)

一. LVS简介LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org.现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能.使用LVS技术要达到的目标是:通过LVS提