Flink、Yarn架构,以Flink on Yarn部署原理详解

Flink、Yarn架构,以Flink on Yarn部署原理详解

Flink 架构概览

Apache Flink是一个开源的分布式流处理框架,它可以处理实时数据流和批处理数据。Flink的架构原理是其实现的基础,架构原理可以分为以下四个部分:JobManager、TaskManager、JobGraph、Checkpoint。

  1. JobManager

    JobManager是Flink集群的控制节点,负责接收用户提交的任务,将任务分配给TaskManager进行执行,并监控任务的执行状态。JobManager还负责保存和恢复Flink应用程序的状态信息,以及维护JobGraph,对任务进行调度和优化。

  2. TaskManager

    TaskManager是Flink集群的工作节点,负责执行由JobManager分配的任务。每个TaskManager可以执行多个任务,每个任务对应一个或多个并行的TaskSlot。TaskSlot是TaskManager中的一个线程池,它负责执行任务的具体业务逻辑。TaskManager还负责将任务的状态信息发送给JobManager,以便JobManager能够监控任务的执行状态。

  3. JobGraph

    JobGraph是Flink应用程序的执行图,它描述了任务之间的依赖关系和数据流向。JobGraph由JobManager维护,它包含了所有任务的信息,包括任务的输入输出、并行度、任务类型等等。JobManager在接收到用户提交的任务后,会将任务解析成JobGraph,然后对JobGraph进行调度和优化,最终将任务分配到TaskManager上执行。

  4. Checkpoint

    Checkpoint是Flink用于实现容错机制的重要组成部分。Flink支持两种类型的Checkpoint:精确一次(Exactly Once)和至少一次(At Least Once)。Checkpoint会在任务执行过程中周期性地将任务状态信息保存到持久化存储中,以确保在任务失败或系统故障时能够恢复任务状态。在Flink中,Checkpoint的实现采用了异步快照机制,即在Checkpoint过程中不会阻塞任务的执行,从而保证任务的高吞吐量和低延迟。

用户通过 DataStream API、DataSet API、SQL 和 Table API 编写 Flink 任务,它会生成一个 JobGraph。JobGraph 是由 source、map()、keyBy()、window()、apply()和 sink 等算子组成的。当 JobGraph 提交给 Flink 集群后,能够以 Local、Standalone、Yarn 和kubernetes 四种模型运行。

在这里插入图片描述

接下来,深入关注Flink中两个关键组件:JobManager和TaskManager

JobManager架构

在这里插入图片描述

JobManager是Flink集群的控制节点,负责接收用户提交的任务,将任务分配给TaskManager进行执行,并监控任务的执行状态。

Flink JobManager架构原理的核心是JobMaster和ResourceManager,其中JobMaster负责任务的调度和监控,ResourceManager负责集群资源的管理。JobMaster和ResourceManager之间通过RPC通信进行交互。

JobMaster主要负责以下几个方面:

  1. 任务管理

JobMaster负责接收用户提交的任务,并将任务转换为JobGraph。JobGraph是Flink应用程序的执行图,它描述了任务之间的依赖关系和数据流向。JobMaster会对JobGraph进行优化和调度,并将任务分配给TaskManager进行执行。

  1. 任务监控

JobMaster会监控任务的执行状态,包括任务的启动、暂停、恢复和取消等操作。如果任务执行失败,JobMaster会重新分配任务,或者通知用户进行处理。

  1. 状态管理

Flink支持任务的状态管理和恢复,JobMaster负责保存和恢复任务的状态信息。在任务执行过程中,JobMaster会周期性地将任务状态信息保存到持久化存储中,以确保在任务失败或系统故障时能够恢复任务状态。

  1. 高可用性

为了保证JobMaster的高可用性,Flink采用了主备模式。即在Flink集群中,有一个主JobMaster和若干备JobMaster。当主JobMaster发生故障时,备JobMaster会接管任务的管理和调度。

TaskManager架构

在这里插入图片描述

Flink TaskManager架构原理的核心是TaskExecutor和Slot,其中TaskExecutor是Flink集群中的工作节点,负责执行任务,Slot是TaskExecutor中的任务执行单元,用于执行任务的并发执行。

TaskExecutor是Flink集群中的工作节点,它是执行Flink任务的基本单元。一个Flink TaskExecutor节点可以运行多个Slot,每个Slot是TaskExecutor中的任务执行单元,用于执行任务的并发执行。

在Flink任务启动时,JobManager会将任务的JobGraph分配给一组TaskManager节点,每个TaskManager节点会启动一个或多个TaskExecutor进程。在TaskExecutor进程启动时,会为每个Slot创建一个独立的线程池,用于执行任务。

Slot是TaskExecutor中的任务执行单元,每个Slot都可以同时执行一个任务。任务被分配给Slot后,Slot会启动一个线程来执行任务,从输入数据流中读取数据,并将处理结果输出到输出数据流中。

每个Slot都有自己的资源限制,包括CPU、内存、网络等资源。任务的执行会根据资源限制进行调度,以达到最优的资源利用率。当任务执行结束后,Slot会释放资源,以供其他任务使用。

Flink支持任务的动态调整,包括任务的扩容和缩容。当任务需要更多的资源时,Flink可以动态地增加TaskExecutor节点来满足任务的需求。反之,当任务执行结束后,Flink会回收空闲的TaskExecutor节点,以节省资源。

TaskManager主要负责以下功能:

  1. 执行任务

    TaskManager负责接收来自JobManager的任务,并将任务分配到Task执行器中执行。每个TaskManager可以运行一个或多个任务。

  2. 管理任务状态

    TaskManager负责管理任务的状态和执行上下文,并向JobManager报告任务的状态。

  3. 数据交换

    TaskManager中的网络组件负责数据交换。它负责将数据从一个TaskManager发送到另一个TaskManager,并将数据发送到JobManager。

  4. 管理资源

    TaskManager负责管理其本地资源,例如内存和CPU资源,并确保任务在可用资源范围内运行。

  5. 高可用性

    TaskManager支持高可用性。如果一个TaskManager失败,Flink会将其上运行的任务重新分配到其他TaskManager上,以确保任务继续执行。

Yarn架构概览

Yarn 架构原理 - 总览

在这里插入图片描述

YARN(Yet Another Resource Negotiator)是Hadoop生态系统中的一个重要组件,它是一个资源管理系统,负责管理Hadoop集群中的资源和任务。本文将详细介绍YARN中ResourceManager、NodeManager、ApplicationMaster和Container组件的实现原理。

  1. ResourceManager

ResourceManager是YARN中最重要的组件之一。它是集群资源的总管,负责处理客户端应用程序的资源请求,以及为应用程序分配资源。ResourceManager主要有以下几个组件:

  • Scheduler:Scheduler负责为应用程序分配资源,它根据应用程序的需求和集群的可用资源进行调度。Scheduler会考虑各个应用程序的优先级,以及应用程序对资源的需求量等因素。
  • ApplicationManager:ApplicationManager负责管理应用程序的生命周期,包括应用程序的提交、启动、停止和监控等。它还负责向Scheduler提交应用程序的资源请求,并获取Scheduler分配的资源。
  1. NodeManager

NodeManager是YARN中运行在每台机器上的组件,它负责管理单个节点上的资源。NodeManager主要有以下几个组件:

  • ContainerExecutor:ContainerExecutor负责启动和管理容器。容器是YARN中运行应用程序的基本单位,每个容器包含一个或多个任务。
  • ApplicationMasterLauncher:ApplicationMasterLauncher负责启动ApplicationMaster。ApplicationMaster是应用程序的管理器,它负责协调应用程序的各个任务,以及与ResourceManager交互。
  • NodeStatusUpdater:NodeStatusUpdater负责向ResourceManager汇报节点的状态,包括节点的可用资源、健康状况等。
  1. ApplicationMaster

ApplicationMaster是YARN中应用程序的管理器,运行在 Slave 上,它负责数据切分,申请资源和分配、任务监控和容错,以及与ResourceManager交互。

  1. Container

Container是YARN中运行应用程序的基本单位,每个容器包含一个或多个任务。Container 负责对资源进行抽象,包括内存、CPU、磁盘、网络等资源。

其中,最重要的角色是 ResourceManager,主要用来负责整个资源的管理,Client 端是负责向 ResourceManager 提交任务。

Yarn 架构原理 - 任务提交

当用户提交一个任务到YARN时,任务的提交过程可以分为以下几个步骤:

  1. 应用程序提交

用户首先需要将应用程序提交到YARN中。这可以通过命令行工具或API接口完成,用户需要指定应用程序的名称、资源需求和启动命令等信息。

  1. 申请资源

一旦应用程序提交成功,它将会向ResourceManager发送资源请求。ResourceManager会根据集群中的可用资源和其他应用程序的需求,为这个应用程序分配一定数量的资源。

  1. 分配容器

一旦ResourceManager为应用程序分配了资源,它将会向NodeManager发出请求,要求它在一台或多台机器上启动容器。NodeManager接收到请求后,将会为每个容器分配一定数量的资源,并启动容器。

  1. 下载依赖文件

在容器启动之前,NodeManager需要下载应用程序的依赖文件(例如JAR文件)到容器中。这是通过Localizer来完成的。Localizer会从HDFS中下载应用程序的依赖文件,并将它们解压到容器的本地文件系统中。

  1. 启动ApplicationMaster

一旦容器启动并准备好运行应用程序,NodeManager将会启动ApplicationMaster。ApplicationMaster是应用程序的管理器,负责协调应用程序的各个任务,以及与ResourceManager交互。

  1. 分配任务

一旦ApplicationMaster启动成功,它将会向ResourceManager请求更多的资源,以分配应用程序的任务。ResourceManager会根据应用程序的需求和集群的可用资源,为每个任务分配一个容器。

  1. 执行任务

一旦任务被分配到容器中,TaskExecutor将会从容器中获取任务,并在本地执行任务。执行完成后,TaskExecutor会向ApplicationMaster报告任务的状态。

总之,任务提交到YARN的过程涉及多个组件之间的协作和通信。其中ResourceManager负责管理集群资源,NodeManager负责管理单个节点上的资源,ApplicationMaster负责协调应用程序的各个任务,而Container则是运行应用程序的基本单位。 任务的执行和状态监控也涉及多个组件之间的协作和通信。在这个过程中,YARN通过将资源管理和任务管理分离,实现了高效的资源利用和任务协调。

Flink on Yarn 部署原理剖析

Flink on Yarn Per-Job

在这里插入图片描述

Flink on Yarn 中 PerJob 模式是指每次提交一个任务,然后任务运行完成之后资源就会被释放。在了解了Yarn 的原理之后,PerJob 的流程也就比较容易理解了,具体如下:

  • 首先 Client 提交 Yarn App,比如 JobGraph 或者 JARS。
  • 接下来 Yarn 的 ResourceManager 会申请第一个 Container。这个 Container 通过 ApplicationMaster 启动进程,ApplicationMaster 里面运行的是 FLink 程序,即 Flink-Yarn ResourceManager 和 JobManager。
  • 最后 Flink-Yarn ResourceManager 向 Yarn ResourceManager 申请资源。当分配到资源后,启动 TaskManager。TaskManager 启动后向 Flink-Yarn ResourceManager 进行注册,注册成功后 JobManager 就会分配具体的任务给 TaskManager 开始执行。

在Flink on Yarn的Per-Job模式中,每个Flink任务实现资源隔离的主要方式如下:

  1. 独立的Yarn应用程序:每个Flink作业都会被打包成一个独立的Yarn应用程序,包括一个JobManager进程和若干个TaskManager进程。这样可以保证每个Flink作业都运行在一个独立的应用程序中,避免了不同作业之间的资源冲突和干扰。
  2. 动态资源分配:在Flink on Yarn Per-Job模式中,Flink作业会根据实际资源需求向Yarn资源管理器请求所需的资源,并在作业执行期间动态调整资源使用情况。这样可以避免Flink作业占用过多资源,导致其他作业无法正常执行。
  3. 容器隔离:在Yarn中,每个应用程序都运行在一个独立的容器中,容器之间是相互隔离的。Flink作业也是运行在Yarn的容器中,这样可以保证每个Flink作业之间的资源隔离性。
  4. 任务隔离:Flink作业中的每个任务都是独立执行的,它们之间不会共享任何资源,包括内存、CPU、网络等。同时,Flink还提供了TaskExecutor的资源管理机制,可以根据每个任务的资源需求动态调整资源分配情况,从而保证每个任务都能够得到足够的资源。

Flink on Yarn Session

在这里插入图片描述

在 PerJob 模式中,执行完任务后整个资源就会释放,包括 JobManager、TaskManager 都全部退出。而 Session 模式则不一样,它的 Dispatcher 和 ResourceManager 是可以复用的。

Session模式的Flink任务部署过程跟Per-Job类似,两者之间的区别在于:

  1. 部署方式:Session模式是一种长期运行的Flink集群模式,用户可以通过Flink客户端连接到集群中的一个或多个JobManager,提交多个Flink作业,而PerJob模式则是每个Flink作业都会创建一个独立的Yarn应用程序,并在该应用程序中启动JobManager和TaskManager进程。
  2. 资源使用:Session模式是预分配资源的,也就是提前根据指定的资源参数初始化一个Flink集群,并常驻在YARN系统中,拥有固定数量的JobManager和TaskManager,该资源中JobManager有且只有一个。
  3. 作业隔离:Session模式下由于是预分配资源(资源总量有限),多个作业之间又不是隔离的,故可能会造成资源的争用,如果有一个作业因为异常导致TaskManager宕机,则它上面承载着的所有作业也都会受到影响。而在PerJob模式下,由于每个Flink作业都会创建一个独立的Yarn应用程序,因此不同作业之间也是相互隔离的。
  4. 适用场景:PerJob模式适用于长期运行的Flink集群场景,适合处理大量的实时数据,例如流处理、复杂事件处理等;而Session模式适用于短期的、需要单独调度的Flink作业

在这里插入图片描述

Flink on Yarn Application

application模式,在该模式下会为每个提交的应用创建一个集群,用户程序的 main 方法将在JobManager集群中而不是客户端运行。

Application模式的会话集群,仅在特定应用程序的作业之间共享,并在应用程序完成时终止。

在这种体系结构中,Application 模式在不同应用之间提供了资源隔离和负载平衡保证。在特定一个应用程序上,JobManager 执行 main() 可以节省所需的 CPU 周期,还可以节省本地下载依赖项所需的带宽。

在这里插入图片描述

附官网的模式区分如下所示:

在这里插入图片描述

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

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

相关文章

Linux:LAMP架构与论坛搭建

目录 一、动态资源与语言 二、LAMP 架构的组成 三、CGI和astcgi 3.1CGI​​​​​​ 3.2fastcgi 3.3CGI和fastcgi比较 3.4 PHP 配置 3.5 Opcode语言 四、编译安装Apache http 服务 五、安装论坛 一、动态资源与语言 WEB 资源类型: 静态资源:原…

Qt串口通信学习文档

这是官方文档,我也在学习。 QSerialPort Class | Qt Serial Port 5.15.14https://doc.qt.io/qt-5/qserialport.html

如何将下载的安装包导入PyCharm

1. 下载安装包 这里以pyke为例。下载好之后解压缩,然后放入/Lib/site-packages/pyke-1.1.1 2. 打开PyCharm的终端进行安装 python setup.py install 3. 安装好之后导入即可使用 import pyke

用户端Web自动化测试_L3

目录: 浏览器复用Cookie 复用pageobject设计模式异常自动截图测试用例流程设计电子商务产品实战 1.浏览器复用 复用浏览器简介 为什么要学习复用浏览器? 自动化测试过程中,存在人为介入场景提高调试UI自动化测试脚本效率 复用已有浏览…

牛客网Verilog刷题 | 入门特别版本

文章目录 1、 VL1 输出12、VL2 wire连线3、 VL3 多wire连接4、VL4 反相器5、VL5 与门6、VL6 NOR 门7、VL7 XOR 门8、VL8 逻辑运算10、VL10 逻辑运算211、VL11 多位信号12、VL12 信号顺序调整13、VL13 位运算与逻辑运算14、VL14 对信号按位操作15、VL15 信号级联合并16、VL16 信…

Qt 自定义提示框 右下角冒泡

网页右下角上经常会出现一些提示性的信息,B/S有的东西,C/S当然也可以有,就像QQ的消息提示一样! 实现一个类似的东西并不困难,只要想明白原理实现起来就很简单了! 实现原理: (1&#…

在百度地图中添加自定义全屏控件

百度地图中添加全屏控件 前置知识: 进入整个页面的全屏模式 :document.documentElement.requestFullscreen() 进入特定元素的全屏模式 : document.getElementById("ID").requestFullscreen() 退出全屏:document.exitFu…

免费PPT素材网站,我推荐这6个

找PPT素材、模板,就上这6个网站,免费下载,建议收藏~ 菜鸟图库 https://www.sucai999.com/search/ppt/0_0_0_1.html?vNTYwNDUx 菜鸟图库网有非常丰富的免费素材,像设计类、办公类、自媒体类等素材都很丰富。PPT模板种类很多&…

leetcode76. 最小覆盖子串(滑动窗口-java)

滑动窗口 最小覆盖子串滑动窗口代码 上期经典 最小覆盖子串 难度 - 困难 原题链接 - 最小覆盖字串 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。 注意: 对于 t…

金额千位符自定义指令

自定义指令文件 moneyFormat.js /*** v-money 金额千分位转换*/export default {inserted: inputFormatter({// 格式化函数formatter(num, util) {if(num null || num || num undefined || typeof(num) undefined){return }if(util 万元 || util 万){return formatMone…

客户案例:高性能、大规模、高可靠的AIGC承载网络

客户是一家AIGC领域的公司,他们通过构建一套完整的内容生产系统,革新内容创作过程,让用户以更低成本完成内容创作。 客户网络需求汇总 RoCE的计算网络RoCE存储网络1.不少于600端口200G以太网接入端口,未来可扩容至至少1280端口1.…

cuda面试准备(一),架构调试

1 cuda架构 硬件方面 SP (streaming Process) ,SM (streaming multiprocessor) 是硬件(GPUhardware) 概念。而thread,block,grid,warp是软件上的(CUDA) 概念 SP:最基本的处理单元,streaming processor,也称为CUDA core,最后具体的指令和任务都是在SP上处理的。GPU进行并行…

实验七 Linux 内核移植

【实验目的】 掌握 Linux 内核配置和编译的基本方法 【实验环境】 ubuntu 14.04 发行版FS4412 实验平台交叉编译工具:arm-none-linux-gnueabi- 【注意事项】 实验步骤中以“$”开头的命令表示在 ubuntu 环境下执行,以“#”开头的命令表 示在开发板下…

Docker常用操作命令(二)

Docker常用操作命令(二) 11、进入容器 docker exec -it 容器名称or容器ID /bin/bash [rootzch01 ~]# docker exec -it 973ff3caff19 /bin/bash 退出容器 root973ff3caff19:/# exit 12、查看容器中的进程 docker top 容器名称or容器ID [rootzch01 ~]# docker top 973ff3c…

centos7安装JDK

centos7安装JDK 小白教程,一看就会,一做就成。 1.安装 我这有包,需要了可以私发 #创建/data/jdkmkdir -p /data/jdk#jdk的安装包放到/data/jdk里#进入/data/jdkcd /data/jdk #解压tar -zxvf jdk-8u181-linux-x64.tar.gz #编辑环境变量vim /…

vue3 基础知识 ( webpack 基础知识)05

你好 文章目录 一、组件二、如何支持SFC三、webpack 打包工具四、webpack 依赖图五、webpack 代码分包 一、组件 使用组件中我们可以获得非常多的特性: 代码的高亮;ES6、CommonJS的模块化能力;组件作用域的CSS;可以使用预处理器来…

Oracle的学习心得和知识总结(二十七)|Oracle数据库数据库回放功能之论文一翻译及学习

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《Oracle Database SQL Language Reference》 2、参考书籍:《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

JavaWeb-特殊文件(propertis与XML)

目录 Properties文件 一.properties介绍 二.properties使用 三.解决中文乱码问题 XML文件 一.XML介绍 二.XML文件的语法规则 三.XML的使用 Properties文件 一.properties介绍 1.什么是properties文件 Properties文件是一种常用的配置文件格式,用于存储键值…

怎么做用二维码收集数据?问卷码在线生成技巧

在收集用户信息时,一般会通过制作表单的方式,将问题整理处理,让用户选择或者填写,那么现在比较流行的一种方式就是将表单生成二维码,让他人可以通过扫码来填写表单数据。那么使用二维码生成器来制作表单二维码的方法相…

RK3588平台开发系列讲解(AI 篇)RKNN-Toolkit2 模型的加载

文章目录 一、Caffe模型加载接口二、TensorFlow模型加载接口三、TensorFlowLite模型加载接口四、ONNX模型加载五、ONNX模型加载六、PyTorch模型加载接口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 RKNN-Toolkit2 目前支持 Caffe、TensorFlow、TensorFlowLite、ONN…