【基础篇】三、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.hqwc.cn/news/133082.html

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

相关文章

Spring编程常见错误50例-Spring AOP常见错误(上)

Spring AOP常见错误(上) this调用的当前类方法无法被拦截 问题 假设当前开发负责电费充值的类,同时记录下进行充值的时间(此时需要使用到AOP),并提供电费充值接口: Service public class ElectricService {public …

SpringBoot (1)

目录 1 入门案例 1.1 环境准备 1.2 编写pom.xml 1.3 编写入口程序 1.4 编写接口 1.5 编写配置 1.6 快速部署 1.6.1 打jar包 1.6.2 部署 1.7 访问接口 2 全注解开发 2.1 常用注解 2.2 属性绑定注解 2.2.1 注册组件 2.2.2 ConfigurationProperties(prefix"te…

SQLAlchemy 使用封装实例

类封装 database.py #! /usr/bin/env python # -*- coding: utf-8 -*-import sys import json import logging from datetime import datetimefrom core.utils import classlock, parse_bool from core.config import (MYSQL_HOST,MYSQL_PORT,MYSQL_USER,MYSQL_PASS,MYSQL_DA…

黑马JVM总结(三十二)

(1)类加载器-线程上下文1 使用的应用程序类加载器来完成类的加载,不是用的启动类加载器,jdk在某些情况下要打破,双亲委派的模式,有时候需要调用应用程序类加载器来完成类的加载,否则有些类它是找…

从读不完一篇文章,到啃下20万字巨著,大模型公司卷起“长文本”

点击关注 文丨郝 鑫 编丨刘雨琦 4000到40万token,大模型正在以“肉眼可见”的速度越变越“长”。 长文本能力似乎成为象征着大模型厂商出手的又一新“标配”。 国外,OpenAI经过三次升级,GPT-3.5上下文输入长度从4千增长至1.6万token&…

黑马JVM总结(三十一)

(1)类加载器-概述 启动类加载器-扩展类类加载器-应用程序类加载器 双亲委派模式: 类加载器,加载类的顺序是先依次请问父级有没有加载,没有加载自己才加载,扩展类加载器在getParent的时候为null 以为Boots…

STM32 CubeMX PWM三种模式(互补,死区互补,普通)(HAL库)

STM32 CubeMX PWM两种模式(HAL库) STM32 CubeMX STM32 CubeMX PWM两种模式(HAL库)一、互补对称输出STM32 CubeMX设置代码部分 二、带死区互补模式STM32 CubeMX设置代码 三、普通模式STM32 CubeMX设置代码部分 总结 一、互补对称输…

运维大数据平台的建设与实践探索

随着企业数字化转型的推进,运维管理面临着前所未有的挑战和机遇。为应对日益复杂且严峻的挑战,数字免疫系统和智能运维等概念应运而生。数字免疫系统和智能运维作为新兴技术,正引领着运维管理的新趋势。数字免疫系统和智能运维都借助大数据运…

基本微信小程序的购物商城系统

项目介绍 随着互联网的趋势的到来,各行各业都在考虑利用互联网将自己的信息推广出去,最好方式就是建立自己的平台信息,并对其进行管理,随着现在智能手机的普及,人们对于智能手机里面的应用购物平台小程序也在不断的使…

vscode 资源管理器移动到右边

目录 vscode 资源管理器移动到右边 vscode 资源管理器移动到右边 点击 文件》首选项》设置》工作台》外观》 找到这个配置下拉选择左右

神秘的锦衣卫

在看明朝电视剧经常听到的一句台词:锦衣卫办案,闲杂人等速速离开。锦衣卫是明朝特务机构,直接听命于皇帝,是亲军卫之一,也是最重要的一卫。 1、卫所制 卫所制是明代最主要的军事制度,其目标是寓兵于农、屯…

Java数据结构第十七章、手撕位图

给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。【腾讯】 1. 遍历,时间复杂度O(N) 2. 排序(O(NlogN)),利用二分查找: logN 3. 位图解决 数据是否在给定的整形数据中,结…