1.运行时架构

1.1 核心组件

1.1.1 JobManager

作业管理器,对于一个提交执行的作业,JobManager 是真正意义上的“管理者”(Master),负责管理调度,是一个 Flink 集群中任务管理和调度的核心,是控制应用执行的主进程。在不考虑高可用的情况下只能有一个
JobManager ,只有一个是正在运行的领导节点(leader),其他都是备用节点(standby)

JobManager包含三大核心组件:

  • JobMaster
  1. JobMaster是JobManager的核心组件,负责处理单独的作业(job)
  2. JobMaster和Job是一一对应的,多个Job可以运行在一个Flink集群中, 每个Job都有一个自己的JobMaster
  3. 在作业提交时,JobMaster会先接收到要执行的应用,一般是由客户端提 交来的,包括 Jar包,数据流图(dataflow Graph)和作业图(JobGraph)
  4. jobMaster会将JobGraph转换为一个物理层面的数据流图执行图(ExecutionGraph),它包含所有可以并发执行的任务
  5. JobMaster会向资源管理器ResourceManager发出请求,申请必要的资源,一旦获取到足够的资源,就会将执行图分发到真正运行他们的TaskManager上
  6. 在作业的运行过程中,JobMaster会负责所有需要中央协调的操作,比如说检查点(checkpoints)的协调
  • ResourceManager

注意:该ResourceManager是Flink内置的,不是其他资源调度平台(如YARN)的 ResourceManager

  1. ResourceManager主要负责资源的分配和管理,在Flink集群中只有一个
  2. 资源主要指的是TaskManager的槽(task slots),任务槽是Flink集群中的资源调配单元,包含了机器用来计算的一组CPU和内存资源
  3. 每一个task都要分配到一个slot上进行
  4. Flink集群Standalone部署模式下,TaskManager是单独启动的(没有Per-Job模式),此时的ResourceManager只能分发可用的TaskManager任务槽,不能单独启动新的TaskManager
  5. Flink集群部署资源管理平台时(YARN 、K8s)等,ResourceManager 会将有空闲槽位的 TaskManager 分配给 JobMaster。若ResourceManager 没有足够的任务槽,它还可以向资源提供平台请求提供启动 TaskManager 进程的容器。另外,ResourceManager 还负责停掉空闲的 TaskManager,释放计算资源
  • Dispatcher
  1. Dispatcher分发器主要提供一个REST接口,用来提交应用
  2. 为每一个新提交的作业启动一个新的JobMaster组件
  3. 启动Web UI,方便地展示和监控作业信息
  4. 在架构中并不是必须的,在不同的部署模式下可能会被忽略

1.1.2 TaskManager

任务管理器,是Flink中的工作进程,称为Worker

  • 数据流的具体计算由它来完成,每个Flink集群至少一个TaskManager,每一个TaskManager包含一定数量的任务槽(slot),slot是资源调度的最小单位,slot的数量决定了TaskManager并行处理任务的数量
  • 启动后,TaskManager会向ResourceManager注册它的slots,收到ResourceManager的指令后,TaskManager就会将一个或多个slot提供给JobMaster调用,JobMaster就可以分配任务来执行了
  • 在执行过程中,TaskManager 可以缓冲数据,还可以跟其他运行同一应用的 TaskManager交换数据

1.2 作业图

2. 作业提交流程

2.1 抽象流程

Flink 的提交流程,随着部署模式、资源管理平台的不同,会有不同的变化。首先我们从一个高层级的视角,来做一下抽象提炼,看一看作业提交时宏观上各组件是怎样交互协作的

  1. Client向Dispatcher提交作业
  2. Dispatcher通过REST接口将作业(包含 JobGraph)提交给 JobMaster
  3. JobMaster将JobGraph解析成可执行的ExecutionGraph得到所需资源的数量,向ResourceManager申请作业所需要的slots
  4. ResourceManager判断当前是否有足够的可用资源,如果没有则启动新的TaskManager
  5. TaskManager启动之后,向ResourceManager注册可用的slot
  6. ResourceManager向TaskManager发出命令,为新作业提供slots
  7. TaskManager向JobMaster提供slots
  8. JobMaster向TaskManager分发任务
  9. TaskManager执行任务,相互之间可以交换数据

2.2 独立模式(Standalone)

在独立模式下,只有两种部署方式会话模式应用模式,没有分离模式。Flink的三种部署方式
两者整体的作业提交流程十分相似:TaskManager都需要手动启动,JobMaster向ResourceManager申请资源时,ResourceManager会直接要求TaskManager提供资源,区别在于,会话模式下,TaskManager是预先启动的,应用模式的TaskManager是作业提交时启动的


该作业流程除了ResourceManager不需要启动TaskManager,而是直接向已有的TaskManager要求资源,和上述抽象流程完全一致

2.3 FLINK ON YARN

flink在资源管理平台的作业提交流程,以YARN集群为例

  • 会话模式

需要事先申请资源,如图所示:

这里只启动了 JobManager,在 JobManager 内部,由于还没有提交作业,故只有ResourceManager 和 Dispatcher 在运行,而 TaskManager 可以根据需要动态地启动。如图所示:

  1. Client提交任务到Dispatcher
  2. Dispatcher启动JobMaster
  3. JobMaster向ResourceManager(Flink)申请slots
  4. ResourceManager(Flink)向ResourceManager(YARN)申请Container资源
  5. ResourceManager(YARN)启动TaskManager
  6. TaskManager向ResourceManager(Flink)注册可用slots
  7. ResourceManager(Flink)向TaskManager请求slots
  8. TakManager向JobMaster提供slots
  9. JobMaster分发任务给TaskManager,TaskManager执行任务
  • 分离模式

在分离模式下,Flink 集群不会预先启动,而是在提交作业时,才启动新的 JobManager。具体流程如图所示:

  1. Client提交任务到ResourceManager(YARN)
  2. ResourceManager(YARN)分配Container资源,启动Flink的JobMaster,并将作业提交给JobMaster,此处省略Dispatcher(与会话模式的区别点)
  3. JobMaster向ResourceManager(Flink)请求slots
  4. ResourceManager(Flink)向ResourceManager(YARN)请求Container资源
  5. ResourceManager(YARN)启动新的TaskManager容器
  6. TaskManager向ResourceManager(Flink)注册可用的slots
  7. ResourceManager(Flink)向TaskManager请求slots
  8. TaskManager向JobMaster提供slots
  9. JobMaster分发任务给TaskManager,TaskManager执行任务
  • 应用模式
    应用模式与分离模式的提交流程非常相似,只是初始提交给 YARN 资源管理器的不再是具体的作业,而是整个应用。一个应用中可能包含了多个作业,这些作业都将在 Flink 集群中启动各自对应的 JobMaster.

Flink运行时架构及各部署模式下作业提交流程相关推荐

  1. Flink运行时架构

    1 运行时相关的组件     Flink运行时架构主要包括四个不同的组件:作业管理器(JobManager).资源管理器(ResourceManager).任务管理器(TaskManager),以及分 ...

  2. Flink运行时架构 完整使用 (第四章)

    Flink运行时架构 完整使用 一.系统架构 1.整体构成 2.作业管理器(JobManager) 1. JobMaster 2. 资源管理器(ResourceManager) 3. 分发器(Disp ...

  3. 【大数据Spark系列】Spark部署模式与作业提交

    文章目录 Spark部署模式与作业提交 一.作业提交 1.1 spark-submit 1.2 deploy-mode 1.3 master-url 二.Local模式 三.Standalone模式 ...

  4. Flink学习1——运行时架构(standalone模式)

    本篇主要讲述Flink Standalone模式下的运行时架构以及各个组件负责的功能,Flink的运行方式有很多,但都大同小异,本文基本可以满足对flink运行时架构的学习. 正文 Flink系统是主 ...

  5. WCF服务端运行时架构体系详解[下篇]

    作为WCF中一个核心概念,终结点在不同的语境中实际上指代不同的对象.站在服务描述的角度,我们所说的终结点实际上是指ServiceEndpoint对象.如果站在WCF服务端运行时框架来说,终结点实际上指 ...

  6. Spark基础学习笔记02:Spark运行时架构

    文章目录 零.本讲学习目标 一.Spark运行时架构 二.YARN集群架构 (一)YARN集群主要组件 1.ResourceManager - 资源管理器 2.NodeManager - 节点管理器 ...

  7. Taro3.2 适配 React Native 之运行时架构详解

    导读 由 58 前端团队主导的 Taro 3 适配 React Native 工作已完成有一段时间了.目前发布了多个体验版,也将在3月底迎来正式版.基于 Taro 的良好架构演变,适配 React N ...

  8. Spark部署模式、任务提交

    Spark部署模式与任务提交 一.作业提交 1.1 spark-submit Spark 所有模式均使用 spark-submit 命令提交作业,其格式如下: ./bin/spark-submit \ ...

  9. 技术干货实战(4)- 分布式集群部署模式下Nginx如何实现用户登录Session共享(含详细配置与代码实战)

    原文链接:技术干货实战(4)- 分布式集群部署模式下Nginx如何实现用户登录Session共享(含详细配置与代码实战) 最近有小伙伴催更,让debug多写点技术干货,以便多学习.巩固一些技能:没办法 ...

最新文章

  1. C++ 笔记(35)— std::to_string 转换整形数字为字符串
  2. C语言程序设计 细节总结(链表)
  3. C# CAD对象 构造时应把它的父对象也加进它的属性里
  4. mysql命令行各个参数解释
  5. 通过IP地址查计算机名
  6. Coding Party 邀你出战!飞桨黑客马拉松线下场来啦
  7. Android 系统(174)---Android代码分析lint检查篇
  8. 24. Spring Boot 事务的使用
  9. Atitit.biz业务系统 面向框架  面向模式---------数据映射imp
  10. 【运动学】基于matlab嫦娥奔月仿真【含Matlab源码 1238期】
  11. lema刻字机_Chris Lema访谈– WordPress业务
  12. 如何做项目竞标的PPT?
  13. matlab怎么计算行列式,matlab一元线性回归方程的计算和检验/用四种方法计算行列式...
  14. xp3系统登录服务器错误,WindowsXP系统LOL服务器连接异常即将退出怎么解决?
  15. 计算机word虚线分割,Word文档里的波浪线、虚线、分割线都是怎么打出来的?
  16. 吉他 c大调第一把位
  17. 2100 年的世界会怎样?用遥感数据预测未来城市
  18. 让样本不一样重要-A Dual Weighting Label Assignment Scheme for Object Detection
  19. 学计算机语言需要英语基础吗,数学和英语不好的人能学编程吗?
  20. 数据分析系列:归因分析原理、案例(附python代码)

热门文章

  1. 教你快速分辨有什么国际邮箱靠谱,世界十大邮箱排名分享
  2. 情人节撩妹装逼小方法,一学就会
  3. 怎么在第一个PDF文件的中间,插入第二个PDF文件的内容?
  4. 区块链技术将引爆金融深层价值|筱静观察2019第7期
  5. 老树开新花:DLL劫持漏洞新玩法
  6. 【C++】C++基础语法
  7. 自由 stm32f103c8t6芯片学习原理图+中文数据手册pdf
  8. 王者荣耀服务器什么时候维护结束,王者荣耀维护更新到几点 王者荣耀今天维护多久 新赛季几点维护完?...
  9. firefox玩开心农场
  10. 3Dlanenet+