大数据(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 | 分区没有改变 | map 、fliter 、flatMap | Spark的窄依赖 |
Redistributing | 分区会发生改变 | keyBy 、broadcast 、rebalance | Spark的宽依赖 |
Operator Chains
相同并行度的One-to-one操作,Flink将这样相连的算子链接在一起形成一个Task,原来的算子成为里面的一部分。 每个task被一个线程执行.
3.3、图
3.3.1、StreamGraph(逻辑流图)
- 由Flink程序直接映射而成
- 也称逻辑流图
- 表示 计算逻辑
3.3.2、ExecutionGraph(执行图)
- 为了执行一个流处理程序,需要将逻辑流图转换为物理流图
四层 | 说明 | 备注 |
---|---|---|
StreamGraph | 代码生成的最初的图 | 表示程序的拓扑结构。 |
JobGraph | 将多个符合条件的节点,链接为一个节点 | 可减少数据在节点之间流动所需要的序列化/反序列化/传输消耗 |
ExecutionGraph | JobGraph的并行化版本 | 是调度层最核心的数据结构 |
PhysicalGraph | JobManager根据ExecutionGraph对Job进行调度后,在各个TaskManager上部署Task后形成的“图” | 并不是一个具体的数据结构。 |
env.socketTextStream().flatMap(…).keyBy(0).sum(1).print();
上面这一行代码,并发度=2(Source为1个并发度)的执行图四层演变过程
提交流程
高级视角提交流程(通用提交流程)
yarn-cluster
提交流程per-job
- Flink任务提交后,Client向HDFS上传Flink的Jar包和配置;
- 向Yarn的ResourceManager提交任务,ResourceManager分配Container资源;
- 通知对应的NodeManager启动ApplicationMaster,ApplicationMaster启动后加载Flink的Jar包和配置构建环境,然后启动JobManager;
- ApplicationMaster向ResourceManager申请资源启动TaskManager;
- ResourceManager分配Container资源后,由ApplicationMaster通知资源所在节点的NodeManager启动TaskManager;
- NodeManager加载Flink的Jar包和配置构建环境并启动TaskManager;
- TaskManager启动后向JobManager发送心跳包,并等待JobManager向其分配任务。
Appendix
en | 🔉 | cn |
---|---|---|
dispatcher | dɪˈspætʃər | n. 调度员;[计] 调度程序;[计] 分配器 |
dispatch | dɪˈspætʃ | vn 派遣 |
operator | ˈɑːpəreɪtər | n. 算子;运算符 |
以上是关于大数据(9c)Flink运行架构的主要内容,如果未能解决你的问题,请参考以下文章
[4] Flink大数据流式处理利剑: Flink集群安装和运行