本文是博主阅读官网文档、博客及书籍后自己所思所得,若是存在有误的地方,欢迎留言分享,谢谢!


一、任务调度

  Flink是通过task slot的来定义执行资源的,为优化资源的利用率,Flink通过slot共享,可以将多个连续的task任务组成的一个pipeline放在一个slot中运行。当任务并行度>1时,并行任务中的每个pipeline就会分配到一个slot去执行,这样就会有一个问题,若是任务的并行度大于集群中slot的个数了,会咋办?首先,毫无疑问的一点是集群中的slot中都会有pipeline在跑;其次,多的任务就会等待现有的运行结束再去运行。下面结合官网中提供的例子说明一般情况下pipeline的分配情况[1]。

  下图中,一个pipeline由Source - Map - Reduce组成,其中MapFunction的并行度为4,ReduceFunction的并行度为3,集群有两个TaskManager,其中每个TaskManager有3个slot。

  图中,每一个pipeline由一个颜色表示,其中包含3个小圈,每一个圈代表一个算子,ReduceFunction的并行度为3,而MapFunction的为4,所以从Map->Reduce会发生shuffer。图中,任务会以ExecutionVertex 组成的 DAG 图的形式分配到两个TaskManage的slot中,在TaskManager2的slot中,运行在其中一个slot的DAG仅有两个ExecutionVertex ,这里会发生网络shuffer。

二、JobManager 数据结构

  运行在各个TaskManager的slot中任务的调度是通过JobManager完成,除此之外,JobManager还负责失败任务的重启等。

  当JobManager接受到JobGraph(JobGraph 是数据流的表现形式,包括JobVertex和中间结果IntermediateDataSet,每个算子都有诸如并行度和执行代码等属性)会将其转换为ExecutionGraph,两者之间的关系如下图所示:

  对每个 JobVertex,可以看成是经过算子优化组成一个个operator chain(每个operator chain可以是一个或多个算子)和相关信息组成,而ExecutionVertex可以看做是JobVertex的并行版,假设组成一个JobVertex的operator chain的并行度为100,则在ExecutionGraph中,ExecutionVertex有100个,对应关系可以多看看上图。

  在JobGraph转换到ExecutionGraph的过程中[2],主要发生了以下转变:

  • 加入了并行度的概念,成为真正可调度的图结构
  • 生成了与JobVertex对应的ExecutionJobVertex,ExecutionVertex,与IntermediateDataSet对应的IntermediateResult和IntermediateResultPartition等,并行将通过这些类实现。

每个 ExecutionGraph 都有一个与其相关联的作业状态。此作业状态指示作业执行的当前状态,具体的状态图如下:

  图中各个状态说明情况很清楚,就不详细说明,需要注意的是暂停状态的作业将可能不会被完全清理。暂停状态(suspended)仅处于本地终止状态,在Flink的HA模式下,意味着作业的执行仅在相应的 JobManager 上终止,但集群的另一个 JobManager 可以从持久的HA存储中恢复这个作业并重新启动。

Ref

[1]https://ci.apache.org/projects/flink/flink-docs-release-1.6/internals/job_scheduling.html

[2]https://www.cnblogs.com/bethunebtj/p/9168274.html#2%E7%90%86%E8%A7%A3flink%E7%9A%84%E5%9B%BE%E7%BB%93%E6%9E%84

Flink原理(四)——任务及调度的更多相关文章

  1. Flink原理、实战与性能优化读书笔记

    第一章 ApacheFlink介绍 一.Flink优势 1. 目前唯一同时支持高吞吐.低延迟.高性能的分布式流式数据处理框架 2. 支持事件事件概念 3. 支持有状态计算,保持了事件原本产生的时序性, ...

  2. Flink原理(一)——基础架构

    Flink系列博客,基于Flink1.6,打算分为三部分:原理.源码.实例以及API使用分析,后期等系列博客完成后再弄一个目录. 该系列博客是我自己学习过程中的一些理解,若有不正确.不准确的地方欢迎大 ...

  3. 支持向量机原理(四)SMO算法原理

    支持向量机原理(一) 线性支持向量机 支持向量机原理(二) 线性支持向量机的软间隔最大化模型 支持向量机原理(三)线性不可分支持向量机与核函数 支持向量机原理(四)SMO算法原理 支持向量机原理(五) ...

  4. juc线程池原理(四): 线程池状态介绍

    <Thread之一:线程生命周期及五种状态> <juc线程池原理(四): 线程池状态介绍> 线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态.线程池也有5种状态 ...

  5. Flink原理(三)——Task(任务)、Operator Chain(算子链)和Slot(资源)

    本文是参考官方文档结合自己的理解写的,所引用文献均已指明来源,若侵权请留言告知,我会立马删除.此外,若是表达欠妥的地方,欢迎大伙留言指出. 前言 在上一篇博客Flink原理(二) ——资源一文中已简要 ...

  6. [Flink原理介绍第四篇】:Flink的Checkpoint和Savepoint介绍

    原文:https://blog.csdn.net/hxcaifly/article/details/84673292 https://blog.csdn.net/zero__007/article/d ...

  7. 流式处理新秀Flink原理与实践

    随着大数据技术在各行各业的广泛应用,要求能对海量数据进行实时处理的需求越来越多,同时数据处理的业务逻辑也越来越复杂,传统的批处理方式和早期的流式处理框架也越来越难以在延迟性.吞吐量.容错能力以及使用便 ...

  8. How Javascript works (Javascript工作原理) (四) 事件循环及异步编程的出现和 5 种更好的 async/await 编程方式

    个人总结: 1.讲解了JS引擎,webAPI与event loop合作的机制. 2.setTimeout是把事件推送给Web API去处理,当时间到了之后才把setTimeout中的事件推入调用栈. ...

  9. Vue项目搭建及原理四

    四.Vue-cli工作原理及Vue实例创建,工作原理 (一)Vue-cli原理 1.webpack其实使用了node.js的express网页服务器来进行处理网页相关的数据,相当于使用一个类似apac ...

随机推荐

  1. QT中常用工具总结

    1.qmake 利用.pro文件生成Makefile 命令为: eg: qmake -o Makefile hello.pro 2. uic 利用ui界面审查.h头文件 命令为: eg: uic go ...

  2. [Matplotlib] Data Representation

    Jupyter Notebook Goto: https://plot.ly/python/#3d-charts[丰富的作图资源]   Data Visualization¶ In [1]: from ...

  3. [LeetCode] 82. Remove Duplicates from Sorted List II 移除有序链表中的重复项 II

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

  4. 警方破获超大DDoS黑产案,20万个僵尸网络运营商被抓

    中国警方已镇压并逮捕了一个犯罪集团,该集团经营着一个由200,000多个受感染网站构成的僵尸网络,这些网站被用来发起DDoS攻击. 这是中国当局针对兴旺的本地DDoS租用场景进行的首次重大镇压,最大的 ...

  5. .Net Core 2.0发布到 CentOS

    上一篇 在CentOS 7中 使用 Nginx 反代 .Net Core 中创建的项目是创建的默认项目,现在我们来将我们开发的项目发布到 CentOs 中,反代还是使用 Nginx 1.创建一个 .N ...

  6. (转)Java中的String为什么是不可变的? -- String源码分析

    背景:被问到很基础的知识点  string  自己答的很模糊 Java中的String为什么是不可变的? -- String源码分析 ps:最好去阅读原文 Java中的String为什么是不可变的 什 ...

  7. linux echo -e 处理特殊字符

    linux echo -e 处理特殊字符 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:\a 发出警告声:\b 删除前一个字符:\c 最后不加上换行符号:\f 换行但光标仍旧停留 ...

  8. mybatis 一对一 一对多 多对多

    一对一 一对多 多对多

  9. LeetCode 653. 两数之和 IV - 输入 BST(Two Sum IV - Input is a BST)

    653. 两数之和 IV - 输入 BST 653. Two Sum IV - Input is a BST 题目描述 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定 ...

  10. 【C++札记】拷贝构造函数,浅拷贝和深拷贝

    一:拷贝构造函数 拷贝构造函数是一种特殊的构造函数,遵循如下的规则: 1.函数名和类名一致,没有返回值. 2.必须有一个参数,参数是本类型的一个引用变量. 3.拷贝构造函数可以访问参数对象的任意成员( ...