Flink系列-2、Flink架构体系

news2025/1/10 16:00:07

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

大数据系列文章目录

官方网址:https://flink.apache.org/

学习资料:https://flink-learning.org.cn/
在这里插入图片描述

目录

  • Flink中的重要角⾊
  • Flink数据流编程模型
  • Libraries支持
  • Flink集群搭建
    • Local 本地模式(开发测试)
    • Standalone - 伪分布环境(开发测试)
    • Standalone – 完全分布式集群环境(开发测试)
    • Standalone – 完全分布式之高可用HA模式(生产可用)
    • yarn集群环境(生产可用)
      • Flink on Yarn的运行机制
      • Flink on Yarn 的两种使用方式
      • 注意

Flink中的重要角⾊

在这里插入图片描述

  1. JobManager处理器
    也称之为Master,用于协调分布式执行,它们用来调度task,协调检查点,协调失败时恢复等。Flink运行时至少存在一个master处理器,如果配置高可用模式则会存在多个master处理器,它们其中有一个是leader,而其他的都是standby。
  2. TaskManager处理器
    也称之为Worker,用于执行一个dataflow的task(或者特殊的subtask)、数据缓冲和data stream的交换,Flink运行时至少会存在一个worker处理器。
  3. Slot 任务执行槽位
    物理概念,一个TM(TaskManager)内会划分出多个Slot,1个Slot内最多可以运行1个Task(Subtask)或一组由Task(Subtask)组成的任务链。
    多个Slot之间会共享平分当前TM的内存空间,Slot是对一个TM的资源进行固定分配的工具,每个Slot在TM启动后,可以获得固定的资源,比如1个TM是一个JVM进程,如果有6个Slot,那么这6个Slot平分这一个JVM进程的资源,但是因为在同一个进程内,所以线程之间共享TCP连接、内存数据等,效率更高(Slot之间交流方便)
  4. Task
    任务,每一个Flink的Job会根据情况(并行度、算子类型)将一个整体的Job划分为多个Task
  5. Subtask
    子任务,一个Task可以由多个Subtask组成,一个Task有多少个Subtask取决于这个Task的并行度也就是,每一个Subtask就是当前Task任务并行的一个线程,如,当前Task并行度为8,那么这个Task会有8个Subtask(8个线程并行执行这个Task)
  6. 并行度
    并行度就是一个Task可以分成多少个Subtask并行执行的一个参数
    这个参数是动态的,可以在任务执行前进行分配,而非Slot分配,TM启动就固定了
    一个Task可以获得的最大并行度取决于整个Flink环境的可用Slot数量,也就是如果有8个Slot,那么最大并行度也就是8,设置的再大也没有意义

如下图:

  1. 一个Job分为了3个Task来运行,分别是TaskA TaskB TaskC
  2. 其中TaskA设置为了6个并行度,也就是TaskA可以有6个Subtask,如图可见,TaskA的6个Subtask各自在一个Slot内执行
  3. 其中在Slot的时候说过,Slot可以运行由Task(或Subtask)组成的任务链,如图可见,最左边的Slot运行了TaskA TaskB TaskC 3个Task各自的1个Subtask组成的一个Subtask执行链

在这里插入图片描述

在这里插入图片描述

并行度是一个动态的概念,可以在多个地方设置并行度:

  • 配置文件默认并行度:conf/flink-conf.yaml的parallelism.default
  • 启动Flink任务,动态提交参数:比如:bin/flink run -p 3
  • 在代码中设置全局并行度:env.setParallelism(3);
  • 针对每个算子进行单独设置:sum(1).setParallelism(3)

优先级:算子 > 代码全局 > 命令行参数 > 配置文件

Flink数据流编程模型

Flink 提供了不同的抽象级别以开发流式或批处理应用。

在这里插入图片描述

  • 最顶层:SQL/Table API 提供了操作关系表、执行SQL语句分析的API库,供我们方便的开发SQL相关程序
  • 中层:流和批处理API层,提供了一系列流和批处理的API和算子供我们对数据进行处理和分析
  • 最底层:运行时层,提供了对Flink底层关键技术的操纵,如对Event(消息)、state(状态)、time(时间)、window(窗口)等进行精细化控制的操作API

Libraries支持

  • 支持机器学习(FlinkML)
  • 支持图分析(Gelly)
  • 支持关系数据处理(Table)
  • 支持复杂事件处理(CEP)

Flink集群搭建

Flink支持多种安装模式。

  • local(本地)——本地模式
  • standalone——独立模式,Flink自带集群,开发测试环境使用
  • yarn——计算资源统一由Hadoop YARN管理,生产环境测试

下面来说说下各个模式的使用场景及特点

Local 本地模式(开发测试)

本地模式一般在写代码的时候,用以测试Flink代码
原理是通过1个JVM进程,在其内部通过多个线程模拟出各个角色来得到完整的Flink执行环境
可以通过:

  • IDEA中启动Flink程序来获得Local模式的执行
  • 在Flink中启动:start-scala-shell.sh local来启动一个Local的执行环境

Standalone - 伪分布环境(开发测试)

和Local模式不同的是,Standalone模式中Flink的各个角色都是独立的进程。

架构图
在这里插入图片描述

  • Flink程序需要提交给JobClient
  • JobClient将作业提交给JobManager
  • JobManager负责协调资源分配和作业执行。 资源分配完成后,任务将提交给相应的TaskManager
  • TaskManager启动一个线程以开始执行。TaskManager会向JobManager报告状态更改。例如开始执行,正在进行或已完成。
  • 作业执行完成后,结果将发送回客户端(JobClient)

Standalone – 完全分布式集群环境(开发测试)

架构图

在这里插入图片描述

  • client客户端提交任务给JobManager
  • JobManager负责Flink集群计算资源管理,并分发任务给TaskManager执行
  • TaskManager定期向JobManager汇报状态
  • flink的TM就是运行在不同节点上的JVM进程(process),这个进程会拥有一定量的资源。比如内存,cpu,网络,磁盘等。flink将进程的内存进行了划分到多个slot中.图中有2个TaskManager,每个TM有2个slot的,每个slot占有1/2的内存。

Standalone – 完全分布式之高可用HA模式(生产可用)

从上述架构图中,可发现JobManager存在单点故障,一旦JobManager出现意外,整个集群无法工作。所以,为了确保集群的高可用,需要搭建Flink的HA。(如果是部署在YARN上,部署YARN的HA),我们这里演示如何搭建Standalone 模式HA。

HA架构图
在这里插入图片描述

yarn集群环境(生产可用)

Local模式是通过一个JVM进程中,通过线程模拟出各个Flink角色来得到Flink环境
Standalone模式中,各个角色是独立的进程存在
YARN模式就是,Flink的各个角色,均运行在多个YARN的容器内,其整体上是一个YARN的任务

在一个企业中,为了最大化的利用集群资源,一般都会在一个集群中同时运行多种类型的 Workload。因此 Flink 也支持在 Yarn 上面运行;
flink on yarn的前提是:hdfs、yarn均启动

Flink on Yarn的运行机制

在这里插入图片描述
从图中可以看出,Yarn的客户端需要获取hadoop的配置信息,连接Yarn的ResourceManager。所以要有设置有 YARN_CONF_DIR或者HADOOP_CONF_DIR或者HADOOP_CONF_PATH,只要设置了其中一个环境变量,就会被读取。如果读取上述的变量失败了,那么将会选择hadoop_home的环境变量,都区成功将会尝试加载$HADOOP_HOME/etc/hadoop的配置文件。

  • 当启动一个Flink Yarn会话时,客户端首先会检查本次请求的资源是否足够。资源足够将会上传包含HDFS配置信息和Flink的jar包到HDFS。
  • 随后客户端会向Yarn发起请求,启动applicationMaster,随后NodeManager将会加载有配置信息和jar包,一旦完成,ApplicationMaster(AM)便启动。
  • 当JobManager and AM 成功启动时,他们都属于同一个container,从而AM就能检索到JobManager的地址。此时会生成新的Flink配置信息以便TaskManagers能够连接到JobManager。同时,AM也提供Flink的WEB接口。用户可并行执行多个Flink会话。
  • 随后,AM将会开始为分发从HDFS中下载的jar以及配置文件的container给TaskMangers.完成后Fink就完全启动并等待接收提交的job。

Flink on Yarn 的两种使用方式

yarn-session提供两种模式

  • 会话模式
    使用Flink中的yarn-session(yarn客户端),会启动两个必要服务 JobManager 和 TaskManagers客户端通过yarn-session提交作业yarn-session会一直启动,不停地接收客户端提交的作业

有大量的小作业,适合使用这种方式
在这里插入图片描述

  • 分离模式
    直接提交任务给YARN
    大作业,适合使用这种方式
    在这里插入图片描述

注意

如果使用的是flink on yarn方式,想切换回standalone模式的话,需要删除文件:【/tmp/.yarn-properties-root】
因为默认查找当前yarn集群中已有的yarn-session信息中的jobmanager

如果是分离模式运行的YARN JOB后,其运行完成会自动删除这个文件
但是会话模式的话,如果是kill掉任务,其不会执行自动删除这个文件的步骤,所以需要我们手动删除这个文件。

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

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

相关文章

[ web基础知识点 ] 解决端口被占用的问题(关闭连接)(杀死进程)

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

什么是文件描述符

Linux内核在各种不同的文件系统格式之上做了一个抽象层,使得文件、目录、读写访问等概念成为抽象层的概念,因此各种文件系统看起来用起来都一样,这个抽象层称为虚拟文件系统(VFS,Virtual Filesystem)。 内核数据结构 Linux内核的V…

【endnote学习】解决为什么文献引用后出现年/月/日格式(endnote对其他类型引用文件的不兼容导致)

为什么文献引用后出现年/月/日格式问题描述问题解决问题描述 在一次文献引用中发现,引用后的文献格式里面多了年/月/日格式,比如选择AIChE格式时,出现: Liu P, Nrskov JK. Kinetics of the Anode Processes in PEM Fuel Cells …

编译原理——基本块、流图、基本块优化、循环优化(代码优化)

一、划分基本块、画流图 找基本块的入口:一共有三类入口:①代码段的第一个指令;②条件跳转和无条件跳转的目标语句;③条件跳转语句的下一条语句;根据划分的入口画流图,一个基本块的区间:从入口…

C++: STL : 容器:set/multi set,map/multimap

一:set容器 1.1: set容器的构造和赋值 简介:所有元素都会在插入时自动被排序 本质:set/multiset 属于关联式容器 ,底层结构是二叉树实现 set与multiset区别: set: 不 允许容器中有重复元素 multiset :允…

Shader Graph(一)基本使用

一、如何使用Shader Graph 1.1 新建项目 通过创建URP或HDRP模板项目,可以自动配置好Shader Graph。 1.2 已有项目 在「Package Manager」中安装「Shader Graph」及URP或HDRP组件。然后在弹出的渲染管线向导面板中点击「Fix All」即可。如果项目中存在已经创建好…

three.js实战-Sprite实现标签效果

1. demo效果 2 .什么是精灵(Sprite) 按照Three.js官网的解释是:精灵是一个总是面朝着摄像机的平面,通常含有使用一个半透明的纹理。精灵不会投射任何阴影,即使设置了也将不会有任何效果。 3. 代码大致逻辑 创建一个canvas对象,首先调用ctx…

密码学_DES加密算法

目录 DES(Data Encryption Standard) IP置换: E盒扩展 S盒压缩 P盒置换 K密钥生成 PC-1置换表(通常用此表): PC-2置换表(通常用此表): IP-1逆置换表 DES&#x…

MyBatis的SQL执行结果和客户端执行结果不一致问题排查

MyBatis的SQL执行结果和客户端执行结果不一致问题排查问题引入测试表、测试数据问题介绍排查问题调试 MyBatis源码JDBC 执行 SQL解决问题待解决问题最近遇到一个调试很久的问题,MyBatis 查询 Oracle 数据库查询结果与在客户端查询结果不一致。 问题引入 测试表、测…

自动化审批流程有哪些?使用中的优点是什么

自动化审批对HR管理有多重要呢?相信每一位HR都会希望让审批流程实现自动化,从而释放更多的时间去处理更加复杂的工作。 在人力资源管理过程中,自动化审批可以有效帮助HR提高流程效率。当管理人员每天收到很多审批请求之后,如果不…

AVS3中的AMVR和EMVR

在AVS2中运动预测中使用的MV都是1/4像素精度,通过在整像素间插值能显著提升非整像素运动预测的精度,同时带来的问题是随着MV精度的提高编码MVD所需的比特数也会增加。 AMVR AMVR支持的MVD编码5种精度的MVR{1/4,1/2,1,2,4},索引为0到4&#x…

IU5706 外置MOS、33V输出大功率同步升压芯片产品介绍

概要 IU5706E是高性能宽输入范围(4.5V~24V)同步升压控制器,支持高达33V的输出电压。输出电压采用恒定频率电流模式脉宽调制(PWM)控制来实现调节。 芯片通过外部定时电阻器或通过与外部时钟信号同步来设置开关频率。在电…

PGL 系列(五)DeepWalk

DeepWalk 通过随机游走(truncated random walk)学习出一个网络的表示,在网络标注顶点很少的情况也能得到比较好的效果。随机游走起始于选定的节点,然后从当前节点移至随机邻居,并执行一定的步数,该方法大致可分为四个步骤: (a) 展示了原始的用户行为序列。(b) 基于这些用…

Redis架构 - Sentinel哨兵模式

简介 Redis Sentinel是Redis官方提供的一个高可用方案。是一种用于监控、提醒和自动故障转移的系统。它可以监控多个Redis实例,并在主服务器出现故障时执行故障转移,将从服务器升级为主服务器。 在Sentinel模式下,可以设置多个Sentinel实例…

6.1 函数基础

文章目录编写函数调用函数形参和实参函数的形参列表函数的返回类型局部对象自动对象局部静态对象函数声明在头文件中进行函数的声明分离式编译编译和链接多个源文件一个典型的函数 定义包括以下部分:返回类型、函数名字、由0个或多个形参组成的 列表以及函数体。其中&#xff0…

数据库,计算机网络、操作系统刷题笔记20

数据库,计算机网络、操作系统刷题笔记20 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle…

第三十章 数论——扩展中国剩余定理

第三十章 数论——扩展中国剩余定理一、中国剩余定理的弊端二、扩展中国剩余定理1、作用2、内容3、问题4、代码一、中国剩余定理的弊端 在第二十九章中,作者详细地讲解了中国剩余定理的使用,在开始本章节的讲解之前,建议读者先去看上一章节的…

Tensorflow2 图像分类-Flowers数据深度学习模型保存、读取、参数查看和图像预测

目录 1.原文完整代码 1.1 模型运行参数总结 1.2模型训练效果 ​编辑2.模型的保存 3.读取模型model 4.使用模型进行图片预测 5.补充 如何查看保存模型参数 5.1 model_weights 5.2 optimizer_weights 使用之前一篇代码: 原文链接:Tensorflow2 图像分…

English Learning - L1-7 介词 2022.12.26 周一

English Learning - L1-7 介词 2022.12.26 周一7 介词7.1 介词功能 1 - 表示动作的方向,范围和程度7.2 介词功能 2 - 胶水词,链接不同的名词7.3 介词功能 3 - 与 be 动词连用代替动词7.4 江南四大介词on核心意义:在。。。上; 在(某…

融云 x OHLA:「社交+游戏」双轮驱动,逐鹿中东陌生人社交

完整报告,关注公众号文章限免下载 走过十多年的出海历程,中国创业者面临的机遇和挑战正在发生根本性变化。TikTok、SHEIN 在全球大获全胜的背后,不仅有中国产业链成熟、工程师红利的厚积薄发,也有一代代出海人布局全球商业路径的思…