ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

大数据(9c)Flink运行架构

2021-11-04 15:00:26  阅读:230  来源: 互联网

标签:Task 架构 插槽 9c Flink JobManager TaskManager 执行


文章目录

〇运行架构图

1、Client(客户端)

  • 客户端 用于 准备和发送dataflow到JobManager
  • 狭义的讲,客户端不是运行和程序执行的一部分
    客户端可以断开与JobManager的连接(detached mode)
    也可以继续保持与JobManager的连接(attached mode)

2、JobManager(作业管理器)

  • 控制一个应用程序执行的主进程
  • JobManager会先接收到要执行的应用程序,该应用程序包括:
    作业图(JobGraph)
    逻辑数据流图(logical dataflow graph)
    打包了的JAR
  • JobManager会把JobGraph转换成一个物理层面的数据流图(ExecutionGraph),ExecutionGraph包含了所有可以并发执行的任务。
    JobManager会向资源管理器请求执行任务必要的资源,也就是任务管理器(TaskManager)上的插槽(slot)。
    资源足够,就会将执行图分发到真正运行它们的TaskManager上。
  • 在运行过程中,JobManager会负责所有需要中央协调的操作,比如:检查点(checkpoints)的协调

2.1、ResourceManager(资源管理器)

  • 整个Flink集群中只有一个ResourceManager

  • 负责资源的管理
    主要管理任务管理器(TaskManager)的插槽(Slot)
    插槽是Flink中定义的处理资源单元

  • 分配
    有空闲插槽的TaskManager给JobManager

  • 终止
    空闲的TaskManager以释放资源

这个ResourceManager和YARN的碰巧重名,但不是一回事

2.2、Dispatcher(调度器)

  • 负责接收用户提供的作业,并负责为这个新提交的作业启动一个新的JobMaster
  • Dispatcher会启动一个Web UI,来展示和监控作业执行的信息
  • Dispatcher并非必需的,这取决于应用提交运行的方式

2.3、JobMaster(作业主控器)

  • JobMaster负责管理单个JobGraph的执行
  • 多个Job可以同时运行在一个Flink集群中,每个Job都有一个自己的JobMaster

3、TaskManager

  • Flink中的工作进程

  • TaskManager向资源管理器注册自己的插槽;
    收到资源管理器的指令后,TaskManager就会将插槽提供给JobManager调用,JobManager就可以向插槽分配任务(tasks)来执行了

  • 通常会有多个TaskManager运行,每个TaskManager都包含了一定数量的插槽
    插槽的数量限制了TaskManager能够执行的任务数量

  • 在执行过程中,一个TaskManager可以跟其它运行同一应用程序的TaskManager交换数据。

3.1、Slot(插槽)

  • Flink中每一个TaskManager都是一个JVM进程,通过TaskSlot来控制TaskManager能接收多少个Task(1个TaskManager至少有1个TaskSlot)

  • 每个TaskSlot表示TaskManager拥有资源的一个固定大小的子集。
    插槽不隔离CPU,只隔离内存

例如:
1个TaskManager有3个插槽,那么TaskManager管理的内存会分成3份给各个插槽
资源插槽化意味着一个Task不需要和其它Job的Task竞争被管理的内存

3.2、Task、SubTask、Operator

  • 1个算子的并行度=这个Task的SubTask数量

并行度

流数据传输形式说明示例算子类比
One-to-one分区没有改变mapfliterflatMapSpark的窄依赖
Redistributing分区会发生改变keyBybroadcastrebalanceSpark的宽依赖

Operator Chains

相同并行度的One-to-one操作,Flink将这样相连的算子链接在一起形成一个Task,原来的算子成为里面的一部分。 每个task被一个线程执行.

3.3、图

3.3.1、StreamGraph(逻辑流图)

  • 由Flink程序直接映射而成
  • 也称逻辑流图
  • 表示 计算逻辑

3.3.2、ExecutionGraph(执行图)

  • 为了执行一个流处理程序,需要将逻辑流图转换为物理流图
StreamGraph JobGraph ExecutionGraph PhysicalGraph
四层说明备注
StreamGraph代码生成的最初的图表示程序的拓扑结构。
JobGraph将多个符合条件的节点,链接为一个节点可减少数据在节点之间流动所需要的序列化/反序列化/传输消耗
ExecutionGraphJobGraph的并行化版本是调度层最核心的数据结构
PhysicalGraphJobManager根据ExecutionGraph对Job进行调度后,在各个TaskManager上部署Task后形成的“图”并不是一个具体的数据结构。
env.socketTextStream().flatMap(…).keyBy(0).sum(1).print();

上面这一行代码,并发度=2(Source为1个并发度)的执行图四层演变过程

Appendix

en

标签:Task,架构,插槽,9c,Flink,JobManager,TaskManager,执行
来源: https://blog.csdn.net/Yellow_python/article/details/121141156

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有