Flink流批一体计算(3):FLink作业调度

news2024/11/15 5:05:25

架构

所有的分布式计算引擎都需要有集群的资源管理器,例如:可以把MapReduce、Spark程序运行在YARN集群中、或者是Mesos中。Flink也是一个分布式计算引擎,要运行Flink程序,也需要一个资源管理器。而学习每一种分布式计算引擎,首先需要搞清楚的就是:我们开发的分布式应用程序是如何在集群中执行的,这其中一定会涉及到与资源管理器的交互。其实,可以把资源管理看成是一个cluster的抽象。

我们来看一下Flink集群会涉及到的重要角色。

  1. client

client将编写的代码转换为程序的Dataflow,并对Dataflow进行优化,生成Dataflow Graph,再将job提交给JobManager。我们编写的Flink代码,其实主要是用来描述Flink程序在集群中应该如何执行,Flink集群当然也不是像运行编写的单机程序一样,顺序往下执行。它只会接受一个一个的Job,然后运行Job中一个个的任务。

  1. Job Manager

Job Manager其实是Flink集群的作业管理器,它负责调度、管理集群的计算资源。

  1. Task Manager

一个集群往往由很多的Task Manager组成,Task Manager负责管理、运行具体的任务。Task Manager与Task Manager之间也是能够互相通信的。

组件

用途

实现

Flink Client

将批处理或流式应用程序编译成数据流图,然后提交给JobManager。

  1. Command Line Interface
  2. REST Endpoint
  3. SQL Client
  4. Python REPL
  5. Scala REPL

JobManager

Flink系统的管理节点,管理所有的TaskManager,并决策用户任务在哪些Taskmanager执行。

JobManager的作业提交模式有三种

Application Mode

Per-Job Mode

Session Mode

  1. Standalone:这是一种只需要启动JVM的模式。通过在该模式下手动设置,可以使用Docker、Docker Swarm/Compose、非本地Kubernetes和其他模型进行部署。
  2. Kubernetes
  3. YARN

TaskManager

Flink系统的业务执行节点,执行具体的用户任务、Flink作业

调度

Flink通过Task Slots来定义执行资源。每个TaskManager有一到多个task slot,每个task slot 可以运行一条由多个并行task组成的流水线。 这样一条pipeline由多个连续的task组成。

每个slot能够使用的资源是固定的,例如:如果一个TaskManager上配置了3个slot,那每个slot能够使用的内存为TaskManager管理的内存的1/3。slot与slot之间并不存在内存资源上的竞争。Flink运行用户调整TaskManager的slot数量,如果slot数量为1,那表示每个任务都是在独立的JVM中执行。而如果大于1,表示多个任务运行在一个JVM中。

每个slot运行可以运行一个任务。一个JOB中如果Operator和并行度比较多,就会包含很多任务,而Flink集群中的默认配置,任务是可以共享Slot的。也就是说,一个Slot中可以运行多个任务。

client将Flink代码解析为JobGraph,并且会将一些子任务打包到一个任务中,每个任务运行在一个线程中。每一个任务都是运行在TaskManager中的Slot中。针对流式处理,Flink都会将一个完整的pipeline放在一个Slot中。

这样一个程序运行在一个有两个TaskManager、每个TaskManager有3个slot的Flink集群中。Flink并不是基于每个Operator执行实例来调度的,而是优先会将一个完整的Pipeline,调度到一个slot中。我们看到,针对此处的并行度设置,有三个slot中,都调度了完整的pipeline。

这种方式,可以提高程序运行的吞吐量。如果每一个operator并行度都以独立的线程执行,那么当线程数量较多时,线程需要不停地切换、缓存,这是会有一定开销的。

JobManager数据结构

在作业执行期间,JobManager会持续跟踪各个task,决定何时调度下一个或一组task,处理已完成的task或执行失败的情况。

JobManager 接收 JobGraph,JobGraph 是数据流的表现形式,包括算子(JobVertex)和中间结果(IntermediateDataSet)。每个算子都有诸如并行度和执行代码等属性。

我们编写的代码会转换为JobGraph。其实它也是有向无环图。既然是图结构,那就一定会有Vertex(顶点)以及Edge(边)。Flink中的JobGraph顶点就是JobVertex,它其实就是Flink中的Operator,而JobGraph的边就是IntermediateDataSet,Operator处理后的中间结果。

每个JobVertex都有自己的属性。例如:并行度、以及Operator要执行的代码。而且,为了确保每个JobVertex中的代码能够正确的在JVM中运行,每个JobGraph还得包含一组库(一堆的jar包)

而要真正在集群中运行Flink程序,需要将JobGraph转换为ExecutionGraph。其实,可以把ExecutionGraph理解为JobGraph的并行版本,或者是JobGraph的并行放大。

ExecutionGraph中的顶点为ExecutionVertex。如果某个JobVertex的并行度为50,那么在ExecutionGraph中将会有50个ExecutionVertex(顶点)。每个ExecutionVertex包含了每个任务的执行状态。ExecutionGraph中的边就是IntermediatePartition。因为每个并行度顶点对应的中间结果数据其实就是一个个的分区。

作业状态

每个ExecutionGraph都有一个与之相关的作业状态信息,用来描述当前的作业执行状态。

  • 一次完整的执行

Flink作业刚开始会处于一个created状态,然后开始调度运行时,切换到running状态。在作业运行完后切换到finished状态。

  • 作业运行出现故障

 如果期间出现故障,作业首先切换到failing状态以便取消所有正在运行的task。如果所有job节点都到达最终状态并且job无法重启, 那么job 进入failed状态。

  • 作业重启

如果作业运行期间出现故障,且作业可以重新启动,则作业会进入重启restarting状态,当作业彻底重启之后会进入到created状态。

  • 用户手动取消作业

如果用户手动取消作业,它会进入到cancelling状态,并取消所有正在运行的 task。当所有正在运行的task进入到最终状态的时候,作业转换为cancelled状态。

  • 作业挂起

Finished、canceled和failed会导致全局的终结状态,并且触发作业的清理。跟这些状态不同,suspended状态只是一个局部的终结。局部的终结意味着作业的执行已经被对应的JobManager 终结,但是集群中另外的JobManager 依然可以从高可用存储里获取作业信息并重启。因此一个处于suspended状态的作业不会被彻底清理掉。

Finished、Canceled、Failed状态都是全局终端状态,这些状态会触发作业的清理工作。而挂起suspended状态是一种本地终端状态。它意味着,如果作业已经在一个JobManager上是终止的,但如果是HA集群,另一个JobManager依然可以从HA存储中检索到Job,并重新启动。所以Suspended状态是不会进行Job的完全清理的。

  • 任务的状态

在整个ExecutionGraph执行期间,每个并行task都会经历多个阶段,从created状态到finishedfailed。下图展示了各种状态以及他们之间的转换关系。由于一个 task可能会被执行多次(比如在异常恢复时),ExecutionVertex的执行是由Execution来跟踪的,每个ExecutionVertex 会记录当前的执行,以及之前的执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/672321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

debian11 安装图解

debian11 安装详细图解(实体机) debian是linux几大分支之一,ubuntu也是debian的分支 debian不分服务器、个人桌面版本。 debian12.0.0截至写这篇的时候已经出来了,和11的安装方法一致,由于刚刚出来,相关配套…

网络安全|渗透测试入门学习,从零基础入门到精通—带你学会 身份认证协议Kerberos

目录 Kerberos Kerberos模型 三、Kerberos 基本概念 3.1 基本概念 3.2 KDC 四、Kerberos 原理 4.1 客户端与 Authentication Service 4.2 客户端与 Ticket Granting Service 4.3 客户端与 HTTP Service 五、Kerberos 的优势 Kerberos是一种计算机网络授权协议&#…

把大模型“OTA”进智能座舱,一场革新还是泡沫?

文|智能相对论 作者|leo陈 ChatGPT走红后,大模型的热度持续不减。时至今日,随着国内多巨头掀起“百模大战”,热度又被顶到更高峰。 前两个月里,百度、阿里、腾讯加入;进入5月,先有网易有道,发…

X2000 Linux 调试VL53L0X

之前在RK3566上调试过VL53L0X,这次主要参照之前的记录,在X2000 linux上进行调试。 一、SDK中加入驱动 1、加入源码 不同于常规的方式,将驱动添加到kernel/driver下,君正的linux sdk,需要将驱动添加到module_driver下…

【IIC子系统】IIC驱动框架解析(一)

文章目录 I2C设备驱动开发I2C设备驱动的三种匹配方式(1)通用的匹配方式:OF style match(2)电源管理专用的匹配方式:ACPI style match(3)I2C专用的匹配方式:I2C id table …

Prometheus时间序列选择器

下面均以prometheus_http_requests_total为例子,即prometheus的HTTP请求数,在机器上装prometheus server即可。 本篇简述prometheus的常用检索规则与工具:瞬间向量选择器、区间向量选择器与时间位移选择器。 瞬间向量选择器 瞬间向量选择器&a…

AI绘图提示词/咒语/词缀/关键词使用指南(Stable Diffusion Prompt 设计师操作手册)

基本知识: 安装及其问题解决参考:《Windows安装Stable Diffusion WebUI及问题解决记录》;运行使用时问题《Windows使用Stable Diffusion时遇到的各种问题整理》;模型运用及参数《Stable Diffusion 个人推荐的各种模型及设置参数、…

人工智能现状研究报告(上)

原创 | 文 BFT机器人 01 介绍 定义 人工智能(A):一种广泛的学科,其目标是创造智能机器,而不是人类和动物所展示的自然智能。 通用人工智能(AlamosGold):一个术语,用来描述未来机器可以在所有有经济价值的任务中达到甚至超过人类的全部认知能力…

SQL高级之慢查询日志

简介 他是一种日志记录,用来记录在MySql中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的SQL,会被记录到慢查询日志中long_query_time的默认值为10,运行超过10s以上的语句就会被记录默认情况下,MYSQL…

python自动化测试之unittest简介讲解

一、unittest简介 1.先导入unittest 2.用help函数查看源码解析 3.查看描述: Python unit testing framework, based on Erich Gammas JUnit and Kent Becks Smalltalk testing framework. 翻译:python的单元测试框架,是基于java的junit测…

某农商行利用双因素认证和域用户自助改密方案构筑强身份验证机制,减轻IT运维压力

银行关键业务系统的安全关系到人民财产安全、隐私保护。为了提升银行关键信息基础设施安全防护水平,满足《关键信息基础设施安全保护要求》、等保要求等,某市农商银行正在借助宁盾 2FA 双因素认证和员工自助改密方案为操作系统终端、业务系统、堡垒机等设…

python3爬虫【二】python爬虫进行AES解密遇到的问题

1、TypeError: Object type <class ‘str’> cannot be passed to C code 报错如下&#xff1a; File "C:\Python311\Lib\site-packages\Crypto\Util\_raw_api.py", line 143, in c_uint8_ptrraise TypeError("Object type %s cannot be passed to C cod…

强化学习:随机近似与随机梯度下降

mean estimation 通过前面的学习&#xff0c;我们知道可以通过很多采样来求期望。而求 x ˉ \bar x xˉ 的方法由两种&#xff0c;一是直接将采样数据相加再除以个数&#xff0c;但这样的方法运行效率较低。 第二种方法是迭代式的计算&#xff0c;即来几个数据就算几个数据&a…

C++----析构函数,拷贝构造函数(6)

析构函数 概念 析构函数是一个特殊的函数&#xff0c;函数名和类名相同&#xff0c;但是要在前面加~&#xff0c;既没有参数&#xff0c;也没有返回值。析构函数在对象被销毁自动调用一次 如果类中没有析构函数&#xff0c;编译器会生成一个什么也不做的析构函数 如果类中有…

磁盘调度算法(期末复习版)

文章目录 一. FCFS 调度(先来先服务)二.SSTF调度(最短寻道时间优先)三. SCAN 调度(电梯算法)四. C-SCAN 调度(循环扫描)五. LOOK 调度 一. FCFS 调度(先来先服务) 磁盘调度的最简单形式当然是先来先服务&#xff08;FCFS&#xff09;算法。虽然这种算法比较公平&#xff0c;但…

MySQL千亿级数据生产环境扩容

MySQL千亿级数据生产环境扩容 数据库平滑扩容1. 扩容方案剖析1.1 扩容问题1.2 停机方案1.3 停写方案1.4 日志方案1.5 双写方案&#xff08;中小型数据&#xff09;1.6 平滑2N方案&#xff08;大数据量&#xff09; 2. 平滑2N扩容方案实践2.1 实现应用服务级别的动态扩容2.1.1 M…

时间序列表征之SAX(Symbolic Aggregate approXimation)算法

前言 对于研究时间序列表征、时间序列分类&#xff0c;时间序列状态转换等方向&#xff0c;常用的简单粗暴的一个方法是SAX (Symbolic Aggregate approXimation), 由Jessica Lin等在2003年发表的论文中提出的&#xff0c;该论文的题目为《A Symbolic Representation of Time Se…

敏捷方法中测试人员的价值?

敏捷方法在软件开发中受到青睐&#xff0c;特别是在互联网应用服务系统的开发中&#xff0c;越来越多的公司采用敏捷方法&#xff0c;包括XP、Scrum、Lean、Crystal、FDD等。具体的敏捷方法在操作时有一些区别&#xff0c;但基本思想是一致的&#xff0c;如客户至上、拥抱变化、…

yolov8 源码解读 (part1: backbone, head)

yolov8 除了目标检测之外,还有实例分割功能, 这里解读检测和分割代码。 先上一张结构图,这个图里没有分割模块,后面会在代码里说明分割模块。 本篇解读红色框内的部分。 可以看到每个模块右边都有一个数字:0,1,… 这个数字是模块的顺序编号,按0,1,…,21的顺序进行,而…

澎湃新闻对话腾讯丁珂:从“治已病”到“治未病”,企业需快速构建“安全免疫力”

作者&#xff1a;澎湃新闻记者 周頔 随着数字化进程加快&#xff0c;企业数字化体系的边界在不断拓展&#xff0c;安全风险和挑战不断增加&#xff0c;传统被动防御的安全应对常显疲态&#xff0c;数字安全时代亟待建立全新的安全范式。 6月13日&#xff0c;腾讯安全联合IDC等…