【基础篇】三、Flink集群角色、系统架构以及作业提交流程

news2024/12/23 14:57:46

文章目录

  • 1、集群角色
  • 2、部署模式
  • 3、Flink系统架构
    • 3.1 作业管理器(JobManager)
    • 3.2 任务管理器(TaskManager)
  • 4、独立部署会话模式下的作业提交流程
  • 5、Yarn部署的应用模式下作业提交流程

1、集群角色

Flink提交作业和执行任务,需要以下几个关键组件:

在这里插入图片描述

  • 客户端(Client):客户端的作用是获取Flink应用程序的代码,并作一个转换之后提交给JobManager
  • JobManager:Flink集群里的管事人,对作业进行中央调度管理。它获取到要执行的作业后,会进一步处理转换,然后分发任务给众多的TaskManager
  • TaskManager真正干活的,数据的处理操作就是由TaskManager节点完成的

2、部署模式

会话模式(Session Mode)

先启动Flink集群,保持一个会话,在这个会话种通过客户端提交作业。因为集群启动时所有资源都已经确定,所以所有提交的作业会竞争集群中的资源。比如下图中提交的三个Flink Application:

在这里插入图片描述
有点类似大学入学前,你在的那间宿舍已准备好,开学时和你室友分床位。会话模式比较适合于单个规模小、执行时间短的大量作业。

单作业模式(Per-Job Mode)

上面的会话模式因为资源共享会导致很多问题,为了更好的隔离资源,考虑为每个提交的作业启动一个集群,即单作业Per-Job模式

在这里插入图片描述

单作业模式,提前不启动Flink集群,有作业提交了,再启动一个集群。现提交现启动,每个作业都用的单独的集群,作业完成后,集群关闭,所有资源释放。类似你不住宿舍了,你现在住酒店,去前台现开现住,人走退房。单作业模式Flink无法直接自己运行,需要借助一些资源管理框架来启动集群,如K8S、Hadoop的YARN。

应用模式(Application Mode)

前面提到的两种模式下,Flink应用代码都是在客户端上执行,然后由客户端提交给JobManager的。但是这种方式客户端需要占用大量网络带宽,去下载依赖和把二进制数据发送给JobManager,加上很多情况下我们提交作业用的是同一个客户端,就会加重客户端所在节点的资源消耗。

在这里插入图片描述

所以解决办法就是,不要客户端了,直接把应用提交到JobManger上运行。而这也就代表着,我们需要为每一个提交的应用单独启动一个JobManager,也就是创建一个集群。这个JobManager只为执行这一个应用而存在,执行结束之后JoblManager也就关闭了,这就是应用模式。

总结1

应用模式与单作业模式,都是提交作业之后才创建集群,不同的时,单作业模式是通过客户端来提交的,客户端解析出的每一个作业对应一个集群,而应用模式下,是直接由JobManaget执行应用程序的。

在这里插入图片描述

总结2
  • 会话模式下,集群生命周期独立于集群上运行的任何作业的生命周期,且所有作业之间共享集群资源
  • 单作业模式下,多了启动集群的代价,对于每个提交的作业,资源隔离性得到了保证,集群生命周期和作业生命周期绑定
  • 应用模式下,直接把应用提交到JobManger上运行,不是在客户端上执行

最后,对应这三种模式,采用的部署方式可以是:

  • 独立部署(Standalone:独立)
  • K8S部署
  • YARN部署

本篇只整理独立部署,后两种部署方式见下篇。

3、Flink系统架构

在这里插入图片描述

3.1 作业管理器(JobManager)

JobManager是一个Flink集群中任务管理和调度的核心,是控制应用执行的主进程。也就是说,每个应用都应该被唯一的JobManager所控制执行。JobManger又包含3个不同的组件:

  • 分发器
  • JobMaster
  • 资源管理器

分发器Dispatcher

Dispatcher主要负责提供一个REST接口,用来提交应用,并且负责为每一个新提交的作业启动一个新的JobMaster 组件。Dispatcher也会启动一个Web UI,用来方便地展示和监控作业执行的信息。Dispatcher在架构中并不是必需的,在不同的部署模式下可能会被忽略掉。

JobMaster

JobMaster是JobManager中最核心的组件,负责处理单独的作业(Job)。所以JobMaster和具体的Job是一一对应的,多个Job可以同时运行在一个Flink集群中, 但每个Job都有一个自己的JobMaster。需要注意在早期版本的Flink中,没有JobMaster的概念,而JobManager的概念范围较小,实际指的就是现在所说的JobMaster。

在作业提交时,JobMaster会先接收到要执行的应用。JobMaster会把JobGraph转换成一个物理层面的数据流图,这个图被叫作“执行图”(ExecutionGraph),它包含了所有可以并发执行的任务。JobMaster会向资源管理器(ResourceManager)发出请求,申请执行任务必要的资源(任务插槽等)。一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的TaskManager上。而在运行过程中,JobMaster会负责所有需要中央协调的操作,比如说检查点(checkpoints)的协调。

资源管理器ResourceManager

ResourceManager主要负责资源的分配和管理,在Flink 集群中只有一个。所谓资源,主要是指TaskManager的任务槽(task slots)。任务槽就是Flink集群中的资源调配单元,包含了机器用来执行计算的一组CPU和内存资源每一个任务(Task)都需要分配到一个slot上执行。这里的ResourceManager是Flink内置的资源管理组件,和其他资源管理平台(比如YARN)的ResourceManager不是一个东西。

3.2 任务管理器(TaskManager)

TaskManager是Flink中的工作进程,数据流的具体计算就是它来做的。Flink集群中必须至少有一个TaskManager;每一个TaskManager都包含了一定数量的任务槽(task slots)。Slot是资源调度的最小单位,slot的数量限制了TaskManager能够并行处理的任务数量。
启动之后,TaskManager会向资源管理器注册它的slots;收到资源管理器的指令后,TaskManager就会将一个或者多个槽位提供给JobMaster调用,JobMaster就可以分配任务来执行了。
在执行过程中,TaskManager可以缓冲数据,还可以跟其他运行同一应用的TaskManager交换数据。

4、独立部署会话模式下的作业提交流程

在这里插入图片描述

解析参数,比如我们提交作业时的-p、-c等参数,然后开始逻辑流图(StreamGraph)→ 作业图(JobGraph)→ 执行图(ExecutionGraph)→ 物理图(Physical Graph)

在这里插入图片描述

简单来说:

  • 逻辑流图到作业流图,做了一个算子链的优化,减少数据交换的消耗,比如上面合并算子成算子链。

  • 作业流图到执行流图,按并行度展开,对并行子任务进行了拆分,并明确了任务间数据传输的方式。JobMaster按照执行图去申请Slot,并把一个个任务分发到TaskManager的插槽上去

在这里插入图片描述

JobMaster生成执行图后,会将它分发给TaskManager;各个TaskManager会根据执行图部署任务,形成物理图。物理图主要就是在执行图的基础上,进一步确定数据存放的位置和收发的具体方式。有了物理图,TaskManager就可以对传递来的数据进行处理计算了。

5、Yarn部署的应用模式下作业提交流程

Application模式下去掉了客户端,Yarn模式下,Flink自己的资源管理器已经不管事了,仅仅是一个中介,JobMaster向Flink资源管理器申请slot,它转发给Yarn的ResourceManager。且之前生成逻辑流图、作业流图的任务交给了JobMaster:

在这里插入图片描述

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

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

相关文章

04在命令行中使用Maven命令创建Maven版的Web工程,并将工程部署到服务器的步骤

创建Maven版的Web工程 使用命令生成Web工程 使用mvn archetype:generate命令生成Web工程时,需要使用一个专门生成Web工程骨架的archetype(参照官网看到它的用法) -D表示后面要附加命令的参数,字母D和后面的参数是紧挨着的,中间没有任何其它…

Mac下通过nvm管理node

背景 本地有两个项目,老项目需要用到node 14,新项目需要用node 16,所以只能通过nvm来管理node了 卸载原始的node 我的node是通过官网的.pkg文件安装的,可以通过以下命令进行删除 sudo rm -rf /usr/local/{bin/{node,npm},lib/…

第四篇Android--TextView使用详解

TextView是View体系中的一员&#xff0c;继承自View&#xff0c;用于在界面中展示文字。 基本用法&#xff1a; <TextViewandroid:id"id/textview"android:layout_width"wrap_content"android:layout_height"wrap_content"android:padding&q…

一文带你上手自动化测试中的PO模式!

在UI的自动化测试中&#xff0c;我们需要把测试使用到的数据分离到文件中&#xff0c;如果单纯的写在我们的测试模块里面&#xff0c;不是一个好的设计&#xff0c;所以不管是什么类型的自动化测试&#xff0c;都是需要把数据分离出来的。当然分离到具体的文件里面&#xff0c;…

Arcgis实现Tiff合并

Arcgis实现Tiff合并 现有四幅Tiff影像 打开数据管理工具 输入使用这四幅影像 下面这个就是建立数据库&#xff0c;这个不对 点击确定 合成完毕

Facebook广告账户被封?最全防封及申诉指南

Facebook广告是海外营销的一大利器&#xff0c;但是随着互联网的发展&#xff0c;有部分不法分子正在利用他进行盈利&#xff0c;导致Facebook官方安全审核日益严格&#xff0c;不少卖家遭遇封号问题&#xff01;这篇文章就来教你如何更好地管理 Facebook广告帐户&#xff0c;实…

精品Python的美食推荐系统厨房点餐订餐

《[含文档PPT源码等]精品Python的美食推荐系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技术&#xff1a;JavaScript、VUE.…

大模型增长时代!低代码和 AI 的能力远不止 APP 开发

从低代码开发引发效率革命&#xff0c;到生成式 AI 打破传统限制、颠覆想象&#xff0c;一个前所未有的创造力时代已然开启。作为这场技术变革的见证者和参与者&#xff0c;让创新技术真正“为己所用”&#xff0c;解锁更多的潜在应用场景和机会&#xff0c;无疑是我们共同的目…

es6(二)——常用es6说明

ES6的系列文章目录 es6&#xff08;一&#xff09;——var和let和const的区别 文章目录 ES6的系列文章目录一、变量的结构赋值1.数组的结构赋值2.对象的结构赋值 二、模板字符串三、扩展运算符1.字符串的使用2.数组的使用 四、箭头函数1.普通函数的定义2.箭头函数的定义3.箭头…

大数据时代精准营销是提升品牌竞争力的核心

在营销理论基石渐被撼动和数字时代逐渐兴起的环境下&#xff0c;基于大众市场和大众消费的传统营销理论和方式在受众裂变(碎片化与再中心化)的现实中遇到了瓶颈&#xff0c;传统营销理念和方式在寻找目标受众的过程中已失去了威力。在数字化环境下&#xff0c;如何更好、更精准…

官方烧录软件烧写2023.10版本树莓派镜像

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、下载官方系统二、使用步骤1.打开软件烧写镜像2. ssh是什么&#xff1f;3. 远程控制2.VNC连接3.VNC突然断开&#xff0c;使用外接显示器和鼠标双击打开wifi即…

有关数据集处理的脚本工具【附代码】

在做分类项目的时候(包括目标检测)&#xff0c;经常会涉及到数据集的预处理&#xff0c;这里我将把一些自己写的工具脚本代码开源出来供大家使用&#xff0c;后期也将不定时的更新。 相关功能&#xff1a; 1.分类任务one-hot标签转单标签 2.数据集中各个类别的统计 3.数据集…

ssm+vue的课程网络学习平台管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的课程网络学习平台管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体…

nodejs+vue+elementui酒店客房服务系统mysql带商家

视图层其实质就是vue页面&#xff0c;通过编写vue页面从而展示在浏览器中&#xff0c;编写完成的vue页面要能够和控制器类进行交互&#xff0c;从而使得用户在点击网页进行操作时能够正常。 简单的说 Node.js 就是运行在服务端的 JavaScript。 前端技术&#xff1a;nodejsvueel…

DBCO Sata650,二苯并环辛烷Sata650,Seta-650-DBCO

产品简介&#xff1a; CAS号&#xff1a;N/A 中文名&#xff1a;二苯并环辛烷Sata650 英文名&#xff1a;DBCO Sata650,Seta-650-DBCO 化学式&#xff1a;N/A 分子量&#xff1a;1431.85 纯度标准&#xff1a;95% 供应商&#xff1a;陕西新研博美生物科技有限公司 存储…

接口自动化测试框架搭建【附教程加源码】

1 接口测试 接口测试是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及相互逻辑依赖关系。 接口自动化相对于UI自动化来说&#xff0c;属于更底层的测试&#xff0c;这样带来的好处就是测试收益更大&#xff…

c++day6(菱形继承、虚继承、多态、模板、异常)

今日任务 1.思维导图 2.编程题&#xff1a; 代码&#xff1a; #include <iostream>using namespace std; /*以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&a…

网络安全(黑客技术)—0基础学习手册

目录 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01; 网络安全可以基于攻击和防御视角来分类…

行业追踪,2023-10-12

自动复盘 2023-10-12 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

【设计模式】八、桥接模式

文章目录 举例问题分析基本介绍桥接模式在 JDBC 的源码剖析桥接模式的注意事项和细节JDBC 举例 现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网&#xff0c;打电话等)&#xff0c; 传统方法对应的类图&#xff1a; 问题分析 扩展性问题(类爆炸)&#xff…