Flink原理(四)——任务及调度
本文是博主阅读官网文档、博客及书籍后自己所思所得,若是存在有误的地方,欢迎留言分享,谢谢!
一、任务调度
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
Flink原理(四)——任务及调度的更多相关文章
- Flink原理、实战与性能优化读书笔记
第一章 ApacheFlink介绍 一.Flink优势 1. 目前唯一同时支持高吞吐.低延迟.高性能的分布式流式数据处理框架 2. 支持事件事件概念 3. 支持有状态计算,保持了事件原本产生的时序性, ...
- Flink原理(一)——基础架构
Flink系列博客,基于Flink1.6,打算分为三部分:原理.源码.实例以及API使用分析,后期等系列博客完成后再弄一个目录. 该系列博客是我自己学习过程中的一些理解,若有不正确.不准确的地方欢迎大 ...
- 支持向量机原理(四)SMO算法原理
支持向量机原理(一) 线性支持向量机 支持向量机原理(二) 线性支持向量机的软间隔最大化模型 支持向量机原理(三)线性不可分支持向量机与核函数 支持向量机原理(四)SMO算法原理 支持向量机原理(五) ...
- juc线程池原理(四): 线程池状态介绍
<Thread之一:线程生命周期及五种状态> <juc线程池原理(四): 线程池状态介绍> 线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态.线程池也有5种状态 ...
- Flink原理(三)——Task(任务)、Operator Chain(算子链)和Slot(资源)
本文是参考官方文档结合自己的理解写的,所引用文献均已指明来源,若侵权请留言告知,我会立马删除.此外,若是表达欠妥的地方,欢迎大伙留言指出. 前言 在上一篇博客Flink原理(二) ——资源一文中已简要 ...
- [Flink原理介绍第四篇】:Flink的Checkpoint和Savepoint介绍
原文:https://blog.csdn.net/hxcaifly/article/details/84673292 https://blog.csdn.net/zero__007/article/d ...
- 流式处理新秀Flink原理与实践
随着大数据技术在各行各业的广泛应用,要求能对海量数据进行实时处理的需求越来越多,同时数据处理的业务逻辑也越来越复杂,传统的批处理方式和早期的流式处理框架也越来越难以在延迟性.吞吐量.容错能力以及使用便 ...
- How Javascript works (Javascript工作原理) (四) 事件循环及异步编程的出现和 5 种更好的 async/await 编程方式
个人总结: 1.讲解了JS引擎,webAPI与event loop合作的机制. 2.setTimeout是把事件推送给Web API去处理,当时间到了之后才把setTimeout中的事件推入调用栈. ...
- Vue项目搭建及原理四
四.Vue-cli工作原理及Vue实例创建,工作原理 (一)Vue-cli原理 1.webpack其实使用了node.js的express网页服务器来进行处理网页相关的数据,相当于使用一个类似apac ...
随机推荐
- 012-Shell 提示确认(Y / N,YES / NO)
例1:确认提示(一次) 这个示例代码将为确认提示一次,如果你给输入错误,程序会以状态1退出.这个例子将只接受Y或N或YES或NO(不区分大小写). #!/bin/bash read -r -p &qu ...
- Mudos扩展efunc,packages方式
Mudos扩展efunc,packages方式 首先packages目录建好C文件 我们这里测试了一个mongodb的 mongodb_spec.c mongodb.h mongodb.c 这里具体的 ...
- C# 注册DLL至GAC 并在添加引用中使用该DLL
本文链接:https://blog.csdn.net/World3000/article/details/819835901,创建一个强签名的类库 类库属性中新建秘钥文件 或者使用工具 使用命令sn ...
- java-统计一段句子中各单词出现的次数
问题:统计一段句子中各单词出现的次数. 思路: 1.使用split方法将文章进行分割,我们这里以空格.逗号和句点为分隔符,然后存到一个字符串数组中. 2.创建一个hashMap集合,key是字符串类型 ...
- Qt5 QtQuick系列----QtQuick的Secne Graph剖析(1)
教是言词, 实不是道,道本无言, 言说是妄.------- 达摩 Qt 5提出了一个新的渲染底层,以替代Qt4时期的Graphics View,这个渲染底层就是Scene Graph.Scene Gr ...
- vue中$router以及$route的使用
路由基本概念 route,它是一条路由. { path: '/home', component: Home } routes,是一组路由. const routes = [ { path: '/hom ...
- Spring Boot取消默认tomcat启动,打成war包发布到服务器运行
一.设置打包方式 在pom.xml中设置打包格式 <packaging>war</packaging> 二.取消Spring Boot的tomcat <!--部署成war ...
- 简单的python爬虫教程:批量爬取图片
python编程语言,可以说是新型语言,也是这两年来发展比较快的一种语言,而且不管是少儿还是成年人都可以学习这个新型编程语言,今天南京小码王python培训机构变为大家分享了一个python爬虫教程. ...
- Django中的admin
1.基本知识 在用Django框架写了一个网站之后,我们添加数据大概有两种方式: 1.在连接的数据库中添加数据 2.登录admin,进入后台添加数据 创建一个Django项目后,我们在url.py中会 ...
- day46——特殊符号、标签分类、标签
day46 特殊符号 --空格 >大于号 <小于号 ... 找HTML特殊符号 标签分类 块级标签(行外标签):独占一行,可以包含内敛标签和某些块级标签,div,p,h1-h6,hr,f ...