Flink并行度和Slot详解

一、概念

1、Task:一个阶段多个功能相同的subTask的集合,类似Spark的TaskSet

2、SubTask:是任务最小的执行单元,是一个Java类的实例,完成具体的计算逻辑

3、Slot:计算资源的隔离单元,一个Slot可以运行多个SubTask,但是这些SubTask必须是来自同一个application的不同阶段的subTask。

注意:Flink划分Task主要有四种情况:

(1)类似keyBy,broadcast,rebalance等算子产生shuffer

(2)Parallelism(并行度)变化

(3)new chain,即在算子上执行startNewChain()后,该算子与前面执行的算子分开。

(4)disableChaining,在算子上执行disableChaining(),即算子的开始到结束,单独生成一个task。使用场景,比如该算子逻辑复杂,让算子独自使用一个task内的SubTask。

二、slot

Flink中每一个TaskManager都是一个JVM进程,它可能会在slot上执行一个或多个subTask。

slot数量通常与每个TaskManager节点的可用CPU内核数成比例。一般Slot数量是每个节点的CPU内核数。

Slot的数量由集群中flink-conf.yml配置文件中taskmanager.numberOfTaskSlots设置的。

注意:同一个slot不能执行同一个task的多个subTask。

扩展:slotSharingGroup(String slotSharingGroup)即共享slot

假设flink集群有3个节点,一个jobManager,2个TaskManager。每个TaskManager有2个Slot。即该集群是一共4个slot

任务分配的slot默认名称是default。

拿wordcount为例,运行该application,5个task,14个subTask都运行在共享slot名为"default"上。

如果flatMap上调用slotSharingGroup("slot_name"),则flatMap放在名称叫slot_name的slot上。

后面算子map,keyBy,print都会分配slot名称为slot_name上运行。

那么,异常情况出现了 ,集群中的4个slot,有一个default的slot中运行的是source,flatMap的并行度为4,需要分配到4个叫slot_name的slot上。但是slot_name只有3个。导致资源不够,任务部署失败。

解决方法可以调整并行度为3,或者取消slotSharingGroup的设置。

总结:

(1)Flink的任务资源槽默认名称是default

(2)通过算子调用slotSharingGroup设置算子运行的槽位

(3)如果改变了共享槽位的名称,后面的算子没有设置共享槽位的名称,那么就和上一次改变的槽位名称一致

(4)槽位名称不同的subTask不能在同一个槽位中执行

三、并行度

1、并行度的设定

(1)Operator Level(算子层面)

(2)Execution Environment Level(执行环境层面)

(3)Client Level(客户端层面)

(4)System Level(系统层面,即配置文件中配置)

并行度设定优先级:Operator Level > Execution Environment Level  >  Client Level  >  System Level

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值