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 ...
随机推荐
- Shell流程控制语句for
for语法格式: for 变量 in 参数列表 do 命令 done 或者 for 变量 in 参数列表 ; do 命令 done for语句流程控制图: 实例: [root@youxi1 ~]# v ...
- [转]npm 遇到 write access的问题怎么办
ubuntu下使用 npm install -g 可能会遇到这个问题. 链接地址:https://www.jianshu.com/p/31744aa44824
- DevOps - DevOps精要 - 变革
特别说明 本文是已读书籍的学习笔记和内容摘要,原文内容有少部分改动,并添加一些相关信息,但总体不影响原文表达. <DevOps入门与实践> :本书结合实例详细介绍了在开发现场引入DevOp ...
- 面试之leetcode链表
1 数组 (1)数组的插入 如果是插入到最后,那么不用移动O(1),如果插入位置在中间为O(n).所以最好O(1),最坏O(N),平均O(N),为了插入能达到O(1),插入O(1).引入了链表 2 链 ...
- dubbo问题集合
背景:用于整理在开发过程中遇到的相关问题. Dubbo Server的时候出现“Will not attempt to authenticate using SASL (unknown error)” ...
- Javaweb的概念与C/S、B/S体系结构
大家好,乐字节的小乐又来了,今天的文章是接上次<客户端请求服务器端通信, Web 编程发展基础|乐字节>,这次是讲述Javaweb的介绍和C/S.B/S体系结构. 一.Javaweb的概念 ...
- Java-Readable
import java.nio.*; import java.util.*; import static net.mindview.util.Print.*; public class RandomW ...
- 第二篇:彻底搞清楚 Spring Boot 的配置文件 application.properties
前言 在Spring Boot中,配置文件有两种不同的格式,一个是properties,另一个是yaml. 虽然properties文件比较常见,但是相对于properties而言,yaml更加简洁明 ...
- NumPy基础操作(2)
NumPy基础操作(2) (注:记得在文件开头导入import numpy as np) 目录: 写在前面 转置和轴对换 NumPy常用函数 写在前面 本篇博文主要讲解了普通转置array.T.轴对换 ...
- AVR单片机教程——数字输入
我们已经学习了如何使用按键和拨动开关,不知你有没有好奇 button_down 和 switch_status 等函数是如何实现的.本篇教程带你一探究竟,让我们从按键的原理开始. 在原理图中,按键的符 ...