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

文章目录

  • 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.mzph.cn/news/103976.shtml

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

相关文章

ChatGPT或将引发现代知识体系转变

作为当下大语言模型的典型代表,ChatGPT对人类学习方式和教育发展所产生的变革效应已然引起了广泛关注。技术的快速发展在某种程度上正在“倒逼”教育领域开启更深层次的变革。在此背景下,教育从业者势必要学会准确识变、科学应变、主动求变、以变应变&am…

[Vue]之Jwt的入门和Jwt工具类的使用及Jwt集成spa项目

一,jwt入门 1.1 是什么? JWT,全称为 JSON Web Token,是一种用于在网络应用之间传递信息的标准方法。它是基于 JSON 格式定义的一种简洁且自包含的方式,可以安全地在用户和服务之间传输声明信息 1.2 为什么要使用 ①简…

计算机网络第四层 运输层

一,运输层引入的目的 1,网络通信主体标识 网络通信的本质是运行的主机上的进程之间的通信 同一个主机上有多个进程在工作,进程如何加以区分标识(PID)---本地主机 网络上的主机需要一个统一的进程标识分配机制 逻辑…

express-generator快速构建node后端项目

express-generator是express官方团队开发者准备的一个快速生成工具,可以非常快速的生成一个基于express开发的框架基础应用。 npm安装 npm install express-generator -g初始化应用 express my_node_test 创建了一个名为 my_node_test 的express骨架项目通过 Exp…

【数据结构】:队列的实现

队列 队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队…

EtherCAT 转 CClinkIE 协议网关与三菱CClinkIE通讯方法

远创智控YC-ECTM-CCLKIE网关产品是工业领域的一大神器,它可以通过各种数据接口与仪表、PLC、计量设备等产品进行连接,实时采集这些设备中的运行数据、状态数据等信息。然后,它将采集的数据进行整合、运算等操作后,传输到其他设备或…

Apache Shiro 漏洞复现

文章目录 Apache Shiro 漏洞复现1. Apache Shiro 1.2.4 反序列化漏洞1.1 漏洞描述1.2 漏洞原理1.3 漏洞复现1.3.1 环境启动 1.4 漏洞利用1.5 修复方案 Apache Shiro 漏洞复现 链接地址:Vulhub - Docker-Compose file for vulnerability environment 1. Apache Shi…

提升代码重用性:模板设计模式在实际项目中的应用

在软件开发中,我们经常面临着相似的问题,需要使用相同的解决方法。当我们希望将这种通用的解决方法抽象出来,并在不同的情境中重复使用时,就可以使用设计模式中的模板模式(Template Pattern)。模板模式是一…

基于单片机智能汽车仪表设计系统

基于单片机的汽车智能仪表的设计 摘要:汽车的汽车系统。速度测量以及调速是我们这次的设计所要研究的对象,本次设计的基础核心的模块就是单片机,其应用的核心的控制单元就是stc89c52单片机,用到的测速模块是霍尔传感器&#xff0c…

十大排序算法Java实现及时间复杂度

文章目录 十大排序算法选择排序冒泡排序插入排序希尔排序快速排序归并排序堆排序计数排序基数排序桶排序时间复杂度 参考资料 十大排序算法 选择排序 原理 从待排序的数据元素中找出最小或最大的一个元素,存放在序列的起始位置, 然后再从剩余的未排序元…

时间序列分析基础篇

**时间序列分析(time series analysis)是量化投资中的一门基本技术。时间序列是指在一定时间内按时间顺序测量的某个变量的取值序列。**比如变量是股票价格,那么它随时间的变化就是一个时间序列;同样的,如果变量是股票…

HelloKitty 代码 Python

话不多说直接上代码,绘制速度慢,录屏之后调倍速 import math import turtle as t# 计算长度、角度 t1:画笔对象 r:半径 angle:扇形(圆形)的角度 def myarc(t1, r, angle):arc_length = 2 * math.pi * r * angle

asp.net会议预约管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 会议预约管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语 言开发 asp.net 会议预约管理系统 二、…

【Java学习之道】日期与时间处理类

引言 在前面的章节中,我们介绍了Java语言的基础知识和核心技能,现在我们将进一步探讨Java中的常用类库和工具。这些工具和类库将帮助我们更高效地进行Java程序开发。在本节中,我们将一起学习日期与时间处理类的使用。 一、为什么需要日期和…

Java从resources文件下载文档,文档没有后缀名

业务场景:因为公司会对excel文档加密,通过svn或者git上传代码也会对文档进行加密,所以这里将文档后缀去了,这样避免文档加密。 实现思路:将文档去掉后缀,放入resources下,获取输入流&#xff0…

深度学习验证码项目

项目代码: GitHub - kerlomz/captcha_trainer: [验证码识别-训练] This project is based on CNN/ResNet/DenseNetGRU/LSTMCTC/CrossEntropy to realize verification code identification. This project is only for training the model. GitHub - Python3WebSpi…

win10搭建gtest测试环境+vs2019

首先是下载gtest,这个我已经放在了博客上方资源绑定处,这个适用于win10vs版本,关于liunx版本的不能用这个。 或者百度网盘链接: 链接:https://pan.baidu.com/s/15m62KAJ29vNe1mrmAcmehA 提取码:vfxz 下…

ATF(TF-A)之UBSAN动态代码分析

安全之安全(security)博客目录导读 目录 一、UBSAN简介 二、TF-A中UBSAN配置选项 一、UBSAN简介 未定义行为消毒器(Undefined Behavior Sanitizer,UBSAN)是Linux内核的未定义行为动态检测器。 详细信息可参考:https://github.com/google/kernel-sanit…

js实现日历 完整版

<template><div id"calendar"><!-- 年份 月份 --><div class"title"><div class"label">活动日历</div><div class"total">当前活动 {{ list.length }} 场</div></div><div…

基于Qt C++的工具箱项目源码,含命令行工具、桌面宠物、文献翻译、文件处理工具、医学图像浏览器、插件市场、设置扩展等工具

一、介绍 1. 基本信息 完整代码下载地址&#xff1a;基于Qt C的工具箱项目源码 TBox是一款基于Qt C的工具箱。用户可以自行选择安装所需的工具&#xff08;以插件的形式&#xff09;&#xff0c;将TBox打造成专属于自己的效率软件。TBox基本界面展示如下&#xff1a; 2. 使用…