2.flink整体构成

flink整体构成

  • 作业管理器(JobManager):管理者 负责管理调度 不考虑高可用 只能有一个

  • 任务管理器(TaskManager):工作者 负责执行任务处理数据 可以有一个或者多个

作业管理器(JobManager)

任务管理和调度的核心 控制应用执行的主进程

组件

JobMaster

  • 作用是处理单独的作业(Job)

  • 每个Job都有一个自己独立的JobMaster

JobMaster接收需要执行的应用1

JobMaster将作业图(JobGraph)转换成一个执行图(ExecutionGraph)2

JobMaster向组员管理器(ResourceManager)发出请求 申请执行任务必要的资源 一旦获取到足够的资源 将执行图分发到真正运行它们的TaskManager上

在运行过程中JobManager会负责所有需要中央协调的工作 例如检查点的协调

资源管理器(ResourceManager)

  • 资源的分配和管理 资源主要是指主要是指TaskManager上的任务槽(task slots)4 ,每一个任务都需要分配到一个slot上执行

分发器(Dispatcher)

  • 提供一个REST接口 用来提交应用

  • 为每一个新提交的作业启动一个新的JobManager组件

  • 启动Web UI

任务管理器(TaskManager)

  • 工作进程 数据流的具体计算

  • 包含了一定数量的任务槽(task solt)

  • 收到资源管理器指令之后 将一个或者多个槽位提供给JobManager调用 Jobmanager分配任务

  • 执行过程中 TaskManager可以缓冲数据 也可以进行TaskManager之间通信

作业提交流程

抽象流程

  1. 客户端(app)通过分发器(dispatcher)提供的REST接口 将作业提交个JobManager

  2. 由分发器启动JobMaster 并将作业1,提交给JobMaster

  3. JobMaster将JobGraph解析为可执行的ExectionGraph 得到所需的资源数量 然后向资源管理器请求资源(slots)2

  4. 资源管理器判断当前是否由足够的可用资源:如果没有启动新的TaskManager

  5. TaskManager启动后 向ResourceManager注册自己的可用任务槽(slots)

  6. 资源管理器通知TaskManager为新的作业提供slots

  7. TaskManager链接到对应的JobMaster 提供Slots

  8. JobMaster将需要执行的任务分发给TaskManager

  9. TaskManager执行任务 相互之间可以交换数据

YARN集群

会话模式(Session)

  1. 启动YARN session 创建一个Flink集群 只启动了JobManager

  2. 客户端通过REST接口 将作业提交给分发器

  3. 分发器启动JobMaster 将作业交给JobManager

  4. JobMaster向资源管理器请求资源(slots)

  5. 资源管理器向YARN的资源管理器请求container资源

  6. YARN启动新的TaskManager容器

  7. TaskManager启动后 向Flink资源管理器注册自己的可用任务槽

  8. 资源管理器通知TaskManager为新的作业提供slots

  9. TaskManager链接到对应的JobMaster 提供slots

  10. JobMaster将需要执行的任务分发给TaskManager 执行任务

单作业模式

不会预先启动Flink集群 而是在提交作业时才会启动新的JobManager

  1. 客户端将作业提交给YARN的资源管理器 同时将Flink的Jar包和配置上传到HDFS 以便后续启动Flink相关组件的容器

  2. Yarn的资源管理器分配Container资源 启动Flink JobManager 并将作业提交给JobMaster 省略Dispatch组件 同回话模式3

  3. JobMaster向资源管理器请求资源(slots)

  4. 资源管理器向YARN的资源管理器请求container资源

  5. YARN启动新的TaskManager容器

  6. TaskManager启动后 向Flink资源管理器注册自己的可用任务槽

  7. 资源管理器通知TaskManager为新的作业提供slots

  8. TaskManager链接到对应的JobMaster 提供slots

  9. JobMaster将需要执行的任务分发给TaskManager 执行任务

应用模式

与但作业的提交流程非常相似 只是初始提交给 Yarn资源管理器是具体的作业 而是整个应用

一个应用中可能包含了多个作业

这些作业都将在Flink中启动各自对应的JobManager

重要概念

数据流图(Dataflow Graph)

Flink代码中 定义每一个处理转换操作为"算子"(Operator)

算子分类:

  • Source表示源算子 负责读取数据源

  • Transformation 表示转换算子 利用各种算子进行处理加工

  • Sink表示 下沉算子 负责数据的输出

Flink程序会被映射成所有算子按照逻辑顺序链接在一起的一张图 称为数据流图

类似有向无环图 每一条数据流由一个或多个source算子开始 以一个或者多个sink算子结束

并行度(Parallelism)

flink 用于实现数据并行:

将数据先分发到多个节点

将算子操作 "复制"放到多个节点 数据哎了之后就可以到其中任意一个执行

在Flink执行过程中 每一个算子可以包含一个或多个子任务 这些子任务在不同的线程 不同的物理机 或不同的容器中完全独立的运行

一个特定的算子的子任务(subtask)的个数称之为并行度(parallelisim)

这样 包含并行子任务的数据流就是并行数据流 它需要多个分区(stream partition)来分配任务

一般情况下 一个流程序的并行度 可以认为是其所有算子中最大的并行度

一个程序中 不同的算子可以有不同的并行度

算子链(Operator Chain)

在Flink中 有两种数据传输形式的算子

  • 一对一:数据流维护这分区以及元素的顺序 保证着"一对一关系"

  • 重分区:数据流的分区会发生改变 每一个子任务 会根据数据传输策略 把数据发送到不同的下游目标任务中

合并算子链:

并行度相同的一对一算子操作 可以直接链接在一起形成一个大的任务(task) 这样原来的算子就称为真正任务力的一部分 每个task会被一个线程执行

这样的技术被称为"算子链"

作业图(JobCraph)与执行图(ExecutionGraph)

Flink程序直接映射称为的数据流图(表示计算逻辑的高级视图) 带具体的执行环节时 还需要考虑并行子任务的分配 数据在任务间的传输 以及合并算子链的优化

为了说明最终应该怎样执行一个流处理程序 Flink需要将逻辑流图进行解析 转换为物理数据流图

逻辑流图(StreamGraph)->作业图(JobGraph)->执行图(ExecutionGraph)->物理图(physical Graph)

  1. 逻辑流图(StreamGraph)

    根据用户通过DataStreamAPI所编写的代码生成的最初的DAG图 表示程序的拓扑结构

  2. 作业图(JobGraph)

    StramGraph经过优化后生成 提交给JobManager 的数据结构 确定了当前所有作业中所有任务的划分

    • 将多个符合条件的节点链接在一起合并成一个任务节点 形成算子链 以减少数据交换的消耗

  3. 执行图(ExecutionGraph)

    JobMaster收到JobGraph后 会根据它来生成执行图(ExecutionGraph) 是JobGraph的并行化 版本 是调度称最核心的数据结构

  4. 物理图(Physical Graph)

    JobMaster生成执行图后 会将它分发给TaskManager

    各个TaskManager会根据执行图部署任务 最终物理执行过程也会形成一张"图" 只是一个执行层面的图 并不是一个具体的数据结构

任务(Task)和任务槽(Task Slots)

Slots作用:独立执行一个子任务的

  • 任务对任务槽的共享

    只要是同一个作业 对于不同任务节点的并行终极任务 就可以放到同一个slot上执行 所以对第一个任务节点 它的六个并行子任务必须分到不同的slot( 如果在同一个slot就没法数据并行了)

    资源密集型(对资源消耗多)和非资源密集型(对资源消耗少)的任务同时放到一个slot中

[1]  由客户端提交上来 包括jar包 数据流图(dataflow graph) 作业图(JobGraph)

[2]  物理层面的数据流图3 包含了可以并发执行的任务

[3]  JobManager 根据 ExecutionGraph 对 Job 进行调度后,在各个TaskManager 上部署 Task 后形成的“图”,并不是一个具体的数据结构

[4]  机器执行计算一组CPU资源和内存资源

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值