ICode9

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

Flink之Flink运行时架构

2020-10-17 02:31:36  阅读:253  来源: 互联网

标签:slot task 架构 插槽 Flink JobManager TaskManager 运行


Flink之Flink运行时架构

目录

1、Flink运行时的组件

2、Flink任务提交流程

3、Flink任务调度流程

1、Flink运行时的组件

 

  •  JobManager(作业管理器) 
    • 控制一个应用程序的主进程,也就是说每个应用程序会被一个不同的JobManager所控制执行
    • JobManager会先接收到要执行的应用程序,这个应用程序包括:作业图(JobGraph)、逻辑数据流图(logical dataFlow graph)和打包了的所有类、库和其他资源的JAR包
    • JobManager会把JobGraph转换成一个物理层面的数据流图,这个图被叫做"执行图"(ExecutionGraph,也就是执行计划),包含了所有可以并发执行的任务。(详情参见:https://zhuanlan.zhihu.com/p/22736103
    • JobManager会向资源管理器(ResourceManager)请求执行任务必要的资源,也就是任务管理器(TaskManager)上的插槽(slot)。一旦它获取了足够资源,就会将执行图分发到真正运行它们的TaskManager上。而在运行过程中Jobmanager会负责中央协调操作,比如检查点(checkpoint)的协调。
  • TaskManager(任务管理器)
    • Flink 的工作进程。通常在Flink中会有多个TaskManager在运行,每个taskManager都包含了一定数量的插槽(slot,是Flink中定义的处理资源的单元)。插槽的数量限制了TaskManager能够执行的任务数量。(注意:TaskManager的数量*每个TaskManager 的slot的数量=整个集群能够提供给这个Job的slot总数,就代表这个集群静态并行计算的最大能力,注意与任务的实际并行度相区分)
    • 启动之后,TaskManager会向资源管理器注册它的插槽;收到资源管理器的指令之后,TaskManager就会将一个或者多个插槽提供给JobManager调用,JobManager就可以向插槽分配任务(task)来执行了。
    • 在执行过程中,一个TaskManager可以跟其他运行同一应用程序的TaskManager交换数据。
  • ResourceManager(资源管理器)
    • 主要负责任务管理器(TaskManger)的插槽(slot)。
    • Flink为不同的环境和资源管理工具提供了不同资源管理器,比如YARN,Mesos,K8s以及standalone部署
    • 当JobManager申请插槽资源时,ResourceManager会将有空闲插槽的TaskManager分配给JobManager。如果ResourceManager没有足够的插槽来满足JobManager的请求,它还可以向资源提供平台发起会话,以提供启动TaskManager进程的容器。
  • Dispatcher(分发器)
    • 可以跨作业运行,它为应用提交提供了REST接口
    • 当一个应用被提交执行时,分发器就会启动并将应用移交给一个JobManager
    • Dispatcher也会启动一个WEB UI,用来方便地展示和监控作业执行的信息。
    • Dispatche在架构中可能也不是必须的,这个取决于应用提交运行的方式

2、Flink任务提交流程

 

 

 

 Flink on Yarn:Flink提交任务之后,client向HDFS上上传Flink的jar包和配置,之后向Yarn ResourceManager提交任务,ResourceManager分配Container资源并通知对应的NodeManager启动ApplicationMaster,ApplicationMaster启动之后加载Flink的Jar包和配置构建环境,然后启动JobManager,之后ApplicationManster向ResourceManager申请资源启动TaskMnager,ResourceManager分配好Container资源之后,由ApplicationMaster通知资源所在节点的NodeManager启动TaskManager,NodeManager加载Flink的Jar包和配置构建环境并启动TaskManager,TaskManager启动之后向JobManager发生心跳包,并等待JobManager向其分配任务。

3、Flink任务调度流程

 

 3.1 从API到JobGraph

Flink 四层转化流程

Flink 有四层转换流程,第一层为 Program 到 StreamGraph;第二层为 StreamGraph 到 JobGraph;第三层为 JobGraph 到 ExecutionGraph;第四层为 ExecutionGraph 到物理执行计划。通过对 Program 的执行,能够生成一个 DAG 执行图,即逻辑执行图。如下:

 

 

 

第一部分将先讲解四层转化的流程,然后将以详细案例讲解四层的具体转化。

  • 第一层 StreamGraph 从 Source 节点开始,每一次 transform 生成一个 StreamNode,两个 StreamNode 通过 StreamEdge 连接在一起,形成 StreamNode 和 StreamEdge 构成的DAG。

  • 第二层 JobGraph,依旧从 Source 节点开始,然后去遍历寻找能够嵌到一起的 operator,如果能够嵌到一起则嵌到一起,不能嵌到一起的单独生成 jobVertex,通过 JobEdge 链接上下游 JobVertex,最终形成 JobVertex 层面的 DAG。

  • JobVertex DAG 提交到任务以后,从 Source 节点开始排序,根据 JobVertex 生成ExecutionJobVertex,根据 jobVertex的IntermediateDataSet 构建IntermediateResult,然后 IntermediateResult 构建上下游的依赖关系,形成 ExecutionJobVertex 层面的 DAG 即 ExecutionGraph。

  • 最后通过 ExecutionGraph 层到物理执行层。

Program到StreamGraph的转化

Program 转换成 StreamGraph 具体分为三步:

  • 从 StreamExecutionEnvironment.execute 开始执行程序,将 transform 添加到 StreamExecutionEnvironment 的 transformations。

  • 调用 StreamGraphGenerator 的 generateInternal 方法,遍历 transformations 构建 StreamNode 及 StreamEage。

    •   注意:并不是所有的transform(明天接着更)
  • 通过 StreamEdge 连接 StreamNode。

什么是StreamNode和StreamEdge?

  • StreamNode 是用来描述 operator 的逻辑节点,其关键成员变量有 slotSharingGroup、jobVertexClass、inEdges、outEdges以及transformationUID;

  • StreamEdge 是用来描述两个 operator 逻辑的链接边,其关键变量有 sourceVertex、targetVertex。

 3.2 TaskManager 与 Slots

Flink 中每一个 worker(TaskManager)都是一个 JVM 进程,它可能会在独立的线 程上执行一个或多个 subtask。为了控制一个 worker 能接收多少个 task,worker 通 过 task slot 来进行控制(一个 worker 至少有一个 task slot)。 每个 task slot 表示 TaskManager 拥有资源的一个固定大小的子集。假如一个 TaskManager 有三个 slot,那么它会将其管理的内存分成三份给各个 slot。资源 slot 化意味着一个 subtask 将不需要跟来自其他 job 的 subtask 竞争被管理的内存,取而 代之的是它将拥有一定数量的内存储备。需要注意的是,这里不会涉及到 CPU 的隔 离,slot 目前仅仅用来隔离 task 的受管理的内存。 通过调整 task slot 的数量,允许用户定义 subtask 之间如何互相隔离。如果一个 TaskManager 一个 slot,那将意味着每个 task group 运行在独立的 JVM 中(该 JVM 可能是通过一个特定的容器启动的),而一个 TaskManager 多个 slot 意味着更多的 subtask 可以共享同一个 JVM。而在同一个 JVM 进程中的 task 将共享 TCP 连接(基
于多路复用)和心跳消息。它们也可能共享数据集和数据结构,因此这减少了每个 task 的负载。

 

 

 

标签:slot,task,架构,插槽,Flink,JobManager,TaskManager,运行
来源: https://www.cnblogs.com/xinjitu-001/p/13829604.html

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

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

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

ICode9版权所有