| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 【深入浅出flink】第3篇:多图讲解flink核心概念(通俗易懂)Job、Task、SubTask、Slot、Slotsharing、Parallelism、Operator Chains -> 正文阅读 |
|
[大数据]【深入浅出flink】第3篇:多图讲解flink核心概念(通俗易懂)Job、Task、SubTask、Slot、Slotsharing、Parallelism、Operator Chains |
大家好,我是雷恩Layne,这是《深入浅出flink》系列的第三篇文章,我旨在用最直白的语言写好flink,希望能让所有看到的人一目了然。如果大家喜欢,欢迎点赞、关注,也欢迎留言,共同交流flink的点点滴滴 O(∩_∩)O 文章目录本文是理解flink整个架构的核心,是最基础也是必须要掌握的知识,只有完全理解了它们,你才会在以后学习flink时游刃有余,才能更好的进阶flink高阶知识。 那么,我们就开始吧! 我们知道,用户在客户端提交一个作业(Job)到服务端。服务端为分布式的主从架构。JobManager(master)负责计算资源(TaskManager)的管理、任务的调度、检查点(checkpoint)的创建等工作,而TaskManager(worker)负责SubTask的实际执行。当服务端的JobManager接收到一个Job后,会按照各个算子的并发度将Job拆分成多个SubTask,并分配到TaskManager的Slot上执行。 那么,Slot是什么,它是通过什么运行任务的?它是线程又是什么关系?不同SubTask之间是如何关联在一起的?Slot又该如何管理task?让我们带着这些问题继续往下看! 3.1 Job、Task、SubTask、Slot、Slotsharing、Thread、Parallelism的概念本小节就来对Flink涉及到的Job、Task、SubTask、 Slot、Slotsharing、Thread、Parallelism等概念进行详细介绍。 首先,Job最容易理解,一个Job代表一个可以独立提交给Flink执行的作业,我们向JobManager提交任务的时候就是以Job为单位的,只不过一份代码里可以包含多个Job(每个Job对应一个类的main函数)。 说明如下:
由此可以总结如下:
前面讲了TaskManager才是真正干活的,启动的时候,它会将自己的资源以Slot的方式注册到master节点上的资源管理器(ResourceManager)。JobManager从ResourceManager处申请到Slot资源后将自己优化过后的SubTask调度到这些Slot上面去执行。在整个过程中SubTask是调度的基本单元,而Slot则是资源分配的基本单元。需要注意的是目前Slot只隔离内存,不隔离CPU。
为了更高效地使用资源,Flink默认允许同一个Job中不同Task的SubTask运行在同一个Slot中,这就是SlotSharing(子任务共享)。注意以下描述中的几个关键条件:
下面我们依次来看看官方文档给出的两幅图: 图中两个TaskManager节点共有6个slot,5个SubTask,其中sink的并行度为1,另外两个SubTask的并行度为2。此时由于Subtask少于Slot个数,所以每个Subtask独占一个Slot,没有SlotSharing。这样可能会有三个缺点:
下面我们把把并行度改为6: 此时,Subtask的个数多于Slot了,所以出现了SlotSharing。一个Slot中分配了多个Subtask,特别是最左边的Slot中跑了一个完整的Pipeline。这样做可以解决上面三个缺点:
一个特定算子的Subtask的个数被称之为其并行度(parallelism)。一般情况下,一个流程序(即Job)的并行度,可以认为就是其所有算子中最大的并行度。一个程序中,不同的算子可能具有不同的并行度。 Task Slot是静态的概念,是指TaskManager具有的并发执行能力,可以通过参数 也就是说,假设一共有3个TaskManager,每一个TaskManager中的分配3个TaskSlot,也就是每个TaskManager可以接收3个task,一共9个TaskSlot,如果我们设置 下面是4个Example,介绍了不同parallelism下Subtask在Slot中的分布情况: 3.2 DataFlow、StreamGraph、JobGraph、ExecutionGraph的转化过程所有的Flink程序都是由三部分组成的: Source 、Transformation和Sink。Source负责读取数据源,Transformation利用各种算子进行处理加工,Sink负责输出。Source 、Transformation和Sink共同构成了“逻辑数据流”(dataflows)。 在运行时,Flink上运行的程序会被映射成“逻辑数据流”(dataflows)。每一个dataflow以一个或多个sources开始以一个或多个sinks结束。dataflow类似于任意的有向无环图(DAG)。在大部分情况下,程序中的转换运算(transformations)跟dataflow中的算子(operator)是一一对应的关系,但有时候,一个transformation可能对应多个operator(因为Operator Chains的存在)。 由Flink程序直接映射成的数据流图是StreamGraph,也被称为逻辑流图,因为它们表示的是计算逻辑的高级视图。为了执行一个流处理程序,Flink需要将逻辑流图转换为物理数据流图(也叫执行图)。 Flink 中的执行图可以分成四层:StreamGraph -> JobGraph -> ExecutionGraph -> 物理执行图。
3.3 Stream partition、One-to-one、Redistributing、Operator Chains的原理在执行过程中,一个流(stream)包含一个或多个分区(Stream partition)。TaskManager中的一个slot就是一个stream partition,一个Job的流(stream)分布在多个不同的Slot上执行。对于算子来说,每一个算子(operator)可以包含一个或多个子任务(operator subtask),这些子任务在不同的线程、不同的物理机或不同的容器中彼此互不依赖地执行。
程序(Job)中每一个算子(operator),在实际执行中根据Parallelism被分隔为多个SubTask,数据流在算子之间的流动,就对应到SubTask之间的数据传递,SubTask之间进行数据传递模式有两种,一种是one-to-one(forwarding)模式,另一种是redistributing的模式。 Stream在算子之间传输数据的形式可以是one-to-one(forwarding)的模式也可以是redistributing的模式,具体是哪一种形式,取决于算子的种类。
简单介绍一下keyBy、rebalance、shuffle、broadcast算子数据传递方式的区别:
Flink为了提高性能,将并行度相同且关系为one-to-one的前后两个subtask,融合形成一个task。而TaskManager中一个task运行一个独立的线程中,同一个线程中的SubTask进行数据传递,不需要经过IO,不需要经过序列化,直接发送数据对象到下一个SubTask,性能得到提升,除此之外,subTask的融合可以减少task的数量,提高taskManager的资源利用率。这个过程就是任务链(Operator Chains)。 图1.0中的执行计划,优化结果如下图: Operator Chains过程的几个条件可以概括为:
下图展示了Opeator Chain在数据流图中的过程: 满足上面这三个条件,一定会执行Operator Chains,如果我们不想合并怎么办? 可以设置不同的共享组,虽然设置不同的共享组可以避免Operator Chains,但是不同的共享组的task一定会出现在不同的slot上。现在我们还想slot可以共享,但是不想让其合并,那怎么办呢?可以做重分区操作(通过rebanlce或shuffle)来避免合并,但这又不增加了不必要的Shuffle。这里还有一个另外的操作,即
参考文档
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/19 0:44:35- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |