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


一、任务调度

  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. Laya的滚动容器

    想实现一个简单的滚动容器.例如水平排列10个图标,可以左右滑动查看的. Egret里有布局容器可以滚动 Laya看了教程和示例,没有找到一个滚动容器,只有一个list,需要设置item,显然不是我想要 ...

  2. 通过Onvif设备探索获取EasyNVR网页无插件播放所需要的摄像机硬盘录像机NVR的RTSP地址

    想实现网络监控摄像头进行视频直播的朋友门应该知道,方法其实非常简单,你不需要使用支持直播的网络摄像机,只需要经过一套流媒体服务器将监控摄像头的RTSP视频流转为RTMP\HLS\HTTP-FLV视频流 ...

  3. [LeetCode] 303. Range Sum Query - Immutable 区域和检索 - 不可变

    Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...

  4. [LeetCode] 689. Maximum Sum of 3 Non-Overlapping Subarrays 三个非重叠子数组的最大和

    In a given array nums of positive integers, find three non-overlapping subarrays with maximum sum. E ...

  5. PDF阅读器关闭“使用手型工具阅读文章”功能

    1.问题描述 某些PDF文件打开时,光标显示的手型工具里面有个箭头,一点击鼠标左键,就跳转到下一页了.给阅读带来很多不便. 2.原因 因为这类PDF文档中带有"文章"(articl ...

  6. 进入docker 内部

    $ sudo docker ps $ sudo docker exec -it 775c7c9ee1e1 /bin/bash

  7. mysql 逻辑运算符

    NOT! 逻辑非. 如果操作数为 0,返回 1:如果操作数为非零,返回 0:如果操作数为 NOT NULL,返回 NULL. mysql> SELECT NOT 10; -> 0 mysq ...

  8. 手撕面试官系列(二):开源框架面试题Spring+SpringMVC+MyBatis

    文章首发于今日头条:https://www.toutiao.com/i6712324863006081549/ 前言 跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽.切不可跟风,看 ...

  9. Django最全思维导图

    思维导图传送门

  10. REST Framework接口规范

    REST Framework接口规范 一 .发展及其背景介绍 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备-).因此,必须有一种统一的 ...