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

Posted 小基基o_O

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据(9c)Flink运行架构相关的知识,希望对你有一定的参考价值。

运行架构图

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个并发度)的执行图四层演变过程

提交流程

高级视角提交流程(通用提交流程)

yarn-cluster提交流程per-job

  1. Flink任务提交后,Client向HDFS上传Flink的Jar包和配置;
  2. 向Yarn的ResourceManager提交任务,ResourceManager分配Container资源;
  3. 通知对应的NodeManager启动ApplicationMaster,ApplicationMaster启动后加载Flink的Jar包和配置构建环境,然后启动JobManager;
  4. ApplicationMaster向ResourceManager申请资源启动TaskManager;
  5. ResourceManager分配Container资源后,由ApplicationMaster通知资源所在节点的NodeManager启动TaskManager;
  6. NodeManager加载Flink的Jar包和配置构建环境并启动TaskManager;
  7. TaskManager启动后向JobManager发送心跳包,并等待JobManager向其分配任务。

Appendix

en🔉cn
dispatcherdɪˈspætʃərn. 调度员;[计] 调度程序;[计] 分配器
dispatchdɪˈspætʃvn 派遣
operatorˈɑːpəreɪtərn. 算子;运算符

以上是关于大数据(9c)Flink运行架构的主要内容,如果未能解决你的问题,请参考以下文章

大数据flink系列第二话(flink架构)

大数据开发-Flink-体系结构 && 运行架构

[4] Flink大数据流式处理利剑: Flink集群安装和运行

024 大数据之Flink

[3] Flink大数据流式处理利剑: Flink的部署架构

大数据Flink进阶:Apache Flink架构介绍