Flink原理(二)——资源
前言
本文主要是想简要说明Flink在集群部署、任务提交、任务运行过程中资源情况,若表述有误欢迎大伙留言分享,非常感谢!
一、集群部署阶段
集群部署这里指的是Flink standalone模式,因为在Yarn模式(包括session、single job模式也成Per-job模式)是可以仅通过Flink client提交任务到Yarn上,所以是否手动部署Flink集群对任务的执行是没有影响的。下图[1]是简单的Flink的集群构成情况,包括一个master(JobManager)、两个worker(TaskManager)。至于Flink standalone模式的HA(一般有两个JobManager加上若干个TaskManager组成)是通过zookeeper实现的,其主要思想是通过zookeeper选举出JobManager的active节点,该结点负责资源分配等,另一个节点为standby。Flink的Yarn模式的高可用的通过在container中对JobManager的重启实现的,其具体过程在此不详细说明。

部署阶段主要有以下两个参数:
#每个TaskManager中slot的个数,在conf/flink-conf.yaml中,默认为1
taskmanager.numberOfTaskSlots
#任务的并行度,默认为1
parallelism.default
1)taskmanager.numberOfTaskSlots:每个TaskManager中slot的数量,官方文档推荐:和每个TaskManager中物理CPU的个数成比例,比如:等于CPU的个数,或者是CPU个数的一半;
2)parallelism.default:任务的并行度,默认值为1,该值可以通过在程序中设定setParallesim()改变,并行度与slot的关系见下详解;
二、任务提交阶段
Flink集群资源的使用情况除了和已分配的资源有关外,还与并行度有关,已分配的资源表示Flink可以利用这么多资源,而实际能利用多少资源还和并行度有关。任务并行度的最大值由TaskManager集群的Slot总数决定,如:slot总数为10,则任务最大的并行度为10.
在standalone模式中,Flink任务能利用的总资源已在启动集群时确定,其并行通过在执行./flink run 时,通过可选参数[-p]确定(不指定则为默认值1)。
在Yarn模式中,均是先Yarn集群中分配资源给新建的Flink集群,如下图,其详细过程见文档[2]。

Flink的Yarn模式session、single job模式在实现方法上还是存在一定的区别:
1)session模式是先利用yarn-session.sh在yarn新建一个Flink集群,然后利用./flink run flinkExample.jar提交任务,其资源分配的方式和standalone模式一致;
./yarn-session.sh -n 4 -s 8 -jm 3072 -tm 32768
-n:在yarn上分配了4个container,即分配了4个TaskManager;
-s:每个TaskManager有8个slot;
-jm:每个JobManager中的内存数;
-tm:每个TaskManager中的内存数;
2)single job模式在命令中在申请资源的同时,提交任务,常用命令如下:
./flink run -m yarn-cluster -yn 7 -ys 8 example.jar
-yn:yarn上分配的container个数,即TaskManager的个数;
-ys:每个TaskManager中slot的个数
其他参数的具体使用方法可以在控制台中执行./flink、./yarn-session.sh得到说明。
说明:session模式和single job的区别:
1)session模式:Flink任务运行结束后,从yarn上申请到的资源是不被释放的,等待下一个Flink的提交,类似一个常住在yarn上永远不会结束的yarn任务。因为,yarn的资源分配模式中比如fair策略还是存在资源的竞争的,session模式资源的不释放性,这样可以在Yarn提供资源分配上的基础上进行实现资源隔离,也实现了对集群物理环境的屏蔽,但在一定的程度上造成了资源的浪费;
2)single job模式和一般的yarn任务一样,任务结束后就会释放申请到的资源,使资源得到重复利用。
所以session、single job模式的实际应用应根据需求使用,一般情况下:
single job模式是按需申请资源,一般适合执行时间较长的大任务。此外,该模式下,每次提交任务都需单独启动Flink集群自己的ResourceManager会造成一定的时延;
session模式共享资源,一般适合执行时间短的小任务。此模式下,会共享ResourceManager,所以启动快。
【说明】这里所说的ResourceManager不是Yarn的组件,是Flink本身的,关于深层的分析,见后续博客。
三、任务运行阶段
假定一个3个TaskManager的集群,每个TaskManager有3个slot,集群一个9个slot,从下图中可以得到[3]:任务的并行度为1时,只会用一个slot,并行度为2会用2个slot,依次类推,当并行度为9时,9个slot都会被利用,当然从example4中可知,可以针对不同的算子(operator)定义并行度。


Ref:
[1]https://ci.apache.org/projects/flink/flink-docs-release-1.6/ops/deployment/cluster_setup.html
[2] https://ci.apache.org/projects/flink/flink-docs-release-1.6/ops/deployment/yarn_setup.html
[3]https://ci.apache.org/projects/flink/flink-docs-release-1.6/ops/config.html
Flink原理(二)——资源的更多相关文章
- Flink原理(三)——Task(任务)、Operator Chain(算子链)和Slot(资源)
本文是参考官方文档结合自己的理解写的,所引用文献均已指明来源,若侵权请留言告知,我会立马删除.此外,若是表达欠妥的地方,欢迎大伙留言指出. 前言 在上一篇博客Flink原理(二) ——资源一文中已简要 ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- 并发之AQS原理(二) CLH队列与Node解析
并发之AQS原理(二) CLH队列与Node解析 1.CLH队列与Node节点 就像通常医院看病排队一样,医生一次能看的病人数量有限,那么超出医生看病速度之外的病人就要排队. 一条队列是队列中每一个人 ...
- 3、flink架构,资源和资源组
一.flink架构 1.1.集群模型和角色 如上图所示:当 Flink 集群启动后,首先会启动一个 JobManger 和一个或多个的 TaskManager.由 Client 提交任务给 JobMa ...
- 【Quick 3.3】资源脚本加密及热更新(二)资源加密
[Quick 3.3]资源脚本加密及热更新(二)资源加密 注:本文基于Quick-cocos2dx-3.3版本编写 一.介绍 在前一篇文章中介绍了代码加密,加密方式是XXTEA.对于资源文件来说,同样 ...
- Kafka Topic Partition Replica Assignment实现原理及资源隔离方案
本文共分为三个部分: Kafka Topic创建方式 Kafka Topic Partitions Assignment实现原理 Kafka资源隔离方案 1. Kafka Topic创建方式 ...
- word2vec原理(二) 基于Hierarchical Softmax的模型
word2vec原理(一) CBOW与Skip-Gram模型基础 word2vec原理(二) 基于Hierarchical Softmax的模型 word2vec原理(三) 基于Negative Sa ...
- juc线程池原理(二):ThreadPoolExecutor的成员变量介绍
概要 线程池的实现类是ThreadPoolExecutor类.本章,我们通过分析ThreadPoolExecutor类,来了解线程池的原理. ThreadPoolExecutor数据结构 Thread ...
- 怎么确定一个Flink job的资源
怎么确定一个Flink job的资源 Slots && parallelism 一个算子的parallelism 是5 ,那么这个算子就需要5个slot, 公式 :一个算子的paral ...
随机推荐
- 【转】redis报错“max number of clients reached"
查看redis监控的时候看到redis的graph出现不正常的情况,截图如下: 如上面截图所展示的样子,可以看到redis 的客户端连接数很突兀的上升到10K,又突然下降到0.排除了监控本身的原因,很 ...
- python之fabric(一):环境env (转)
原文地址:https://my.oschina.net/indestiny/blog/289587 1. fabric有很多可配置的环境,如: user:默认用于ssh登录的本地用户名. passwo ...
- 【翻译】Flink Table Api & SQL —Streaming 概念 ——时间属性
本文翻译自官网: Time Attributes https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/str ...
- .Net Core个人笔记
目录 前言 IOC注册 三种生命周期 如何注册一个IOC服务 .Net Core部署IIS之后500错误 管道和中间件 示意图 管道方法 中间件 加日志观看 使用MVC MVC服务注入 MVC管道调用 ...
- charles安装和使用(转)
转发链接:https://blog.csdn.net/zhangxiang_1102/article/details/77855548
- [Python]MySQLdb for Python使用指南/Python的数据库操作
网站就是要和数据库进行交互,否则什么都不用做了...今天我们来看一个叫MySQLdb的库,这个用来和MySQL数据库进行交互.可以从这里获得这个库http://sourceforge.net/proj ...
- 将本机电脑作为自己的网站服务器--基于XAMPP在本地建立wordPress网站
"我不敢说自己从未担心害怕过. 实际上我希望少一点担心害怕,因为它让我分心,让我的神经系统备受煎熬".----马斯克 周日,搞了大半天,为了熟悉wordPress,先在自己的电脑上 ...
- Response的应用
1.HttpServletResponse概述 service方法中的response的类型是ServletResponse,而doGet/doPost方法的response的类型是HttpServl ...
- Python-12-装饰器
一.定义 器即函数 装饰即修饰,意指为其他函数添加新功能 装饰器定义:本质就是函数,功能是为其他函数添加新功能 原则: 1.不修改被装饰函数的源代码(开放封闭原则) 2.为被装饰函数添加新功能后,不修 ...
- String和Irreducible Polynomial(2019牛客暑期多校训练营(第七场))
示例: 输入: 4000010010111011110 输出: 00001001 0111 01111 0 题意:给出一个只含有0和1的字符串,找出一种分割方法,使得每个分割出的字符串都是在该字符串自 ...