关于cluster.evenly-spread-out-slots参数的底层原理

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

关于cluster.evenly-spread-out-slots参数的底层原理

nobleyd
有没有人对cluster.evenly-spread-out-slots参数了解比较深入的给讲解下。

我主要想知道,设置这个参数为true之后。Flink是以一个什么样的规则去尽可能均衡分配的。
standalone集群模式下,每个机器性能相同,flink slot数量配置相同情况下。基于*这种分配规则*,有没有一种方法让Flink做到
*完全均衡*,而*不是尽可能均衡*?

此外,我说的“均衡”都特指算子级别的均衡。不要5机器一共5个slot,然后任务有5个算子,每个算子单并发并且通过不同的share
group各独占1个slot这种均衡。我指的是每个算子都均衡到机器(*假设并发设置合理*)。
Reply | Threaded
Open this post in threaded view
|

Re: 关于cluster.evenly-spread-out-slots参数的底层原理

黄潇
我说一下我看源码(1.11.2)之后的理解吧,不一定准确,仅供参考。

cluster.evenly-spread-out-slots 这个参数设置后会作用在两个地方:
1. JobMaster 的 Scheduler 组件
2. ResourceManager 的 SlotManager 组件

对于 JobMaster 中的 Scheduler,
它在给 execution vertex 分配 slot 是按拓扑排序的顺序依次进行的。
Scheduler 策略是会倾向于把 execution vertex 分配到它的上游节点所分配到的slot上,
因此在给某个具体 execution vertex 分配 slot 时都会计算出一个当前节点倾向于选择的TaskManager集合,
然后在可选的 slot 候选集中会根据三个维度来为某个slot打分,分别是:
1. 候选slot所在的 TaskManager 与倾向于选择的 TaskManager 集合中有多少个的 ResourceID
是相同的(对于standalone模式可以不考虑该维度)
2. 候选slot所在的 TaskManager 与倾向于选择的 TaskManager 集合中有多少个的 全限定域名 是相同的
3. 候选slot所在的 TaskManager 目前的资源占用率
只有配置了 cluster.evenly-spread-out-slots 后,才会考虑第三个维度,否则仅会用前面两个维度进行打分。
打分之后会选择得分最高的 slot 分配给当前的 exection vertex。
需要注意的是这里的资源利用率只是根据某个 slot 所在的 TaskManager 中剩下多少个能够分配该 execution vertex 的
slot 计算出的,
(因为 Flink 要求同一 job vertex 的并行任务不能分配到同一 slot 中),能分配的越多,资源利用率越小,否则利用率越大。
而不是指实际的CPU内存等资源利用率。

对于 ResourceManager 中的 SlotManager 组件(这里说的都是 Standalone 模式下的
ResourceManager),
由于 JobMaster 的 slot 都是要向 resource manager 申请的。如果 JobMaster 需要新的 slot 了,会向
ResourceManager 的 SlotManager 组件申请。
如果没有配置 cluster.evenly-spread-out-slots 的话,SlotManager 从可用 slot 中随机返回一个。
如果配置了 cluster.evenly-spread-out-slots,SlotManager 会返回资源利用率最小的一个 slot。
这里的资源利用率计算方式是:看某个 slot 所在的 TaskManager 中有多少 slot 还没有被分配,空闲的越多,利用率越小,否则越大。

最后,你提问中说的均衡我没有太理解。某个算子的并发子任务是不会被分配到同一个slot中的,
但如果想把这些子任务均匀分配到不同机器上,这个当前的调度算法应该是无法保证的。

Best,
Shawn Huang


赵一旦 <[hidden email]> 于2020年11月5日周四 下午10:18写道:

> 有没有人对cluster.evenly-spread-out-slots参数了解比较深入的给讲解下。
>
> 我主要想知道,设置这个参数为true之后。Flink是以一个什么样的规则去尽可能均衡分配的。
> standalone集群模式下,每个机器性能相同,flink slot数量配置相同情况下。基于*这种分配规则*,有没有一种方法让Flink做到
> *完全均衡*,而*不是尽可能均衡*?
>
> 此外,我说的“均衡”都特指算子级别的均衡。不要5机器一共5个slot,然后任务有5个算子,每个算子单并发并且通过不同的share
> group各独占1个slot这种均衡。我指的是每个算子都均衡到机器(*假设并发设置合理*)。
>
Reply | Threaded
Open this post in threaded view
|

Re: Re: 关于cluster.evenly-spread-out-slots参数的底层原理

Evan


 
发件人: [hidden email]
发送时间: 2020-11-06 16:56
收件人: [hidden email]
主题: Re: 关于cluster.evenly-spread-out-slots参数的底层原理
我说一下我看源码(1.11.2)之后的理解吧,不一定准确,仅供参考。
 
cluster.evenly-spread-out-slots 这个参数设置后会作用在两个地方:
1. JobMaster 的 Scheduler 组件
2. ResourceManager 的 SlotManager 组件
 
对于 JobMaster 中的 Scheduler,
它在给 execution vertex 分配 slot 是按拓扑排序的顺序依次进行的。
Scheduler 策略是会倾向于把 execution vertex 分配到它的上游节点所分配到的slot上,
因此在给某个具体 execution vertex 分配 slot 时都会计算出一个当前节点倾向于选择的TaskManager集合,
然后在可选的 slot 候选集中会根据三个维度来为某个slot打分,分别是:
1. 候选slot所在的 TaskManager 与倾向于选择的 TaskManager 集合中有多少个的 ResourceID
是相同的(对于standalone模式可以不考虑该维度)
2. 候选slot所在的 TaskManager 与倾向于选择的 TaskManager 集合中有多少个的 全限定域名 是相同的
3. 候选slot所在的 TaskManager 目前的资源占用率
只有配置了 cluster.evenly-spread-out-slots 后,才会考虑第三个维度,否则仅会用前面两个维度进行打分。
打分之后会选择得分最高的 slot 分配给当前的 exection vertex。
需要注意的是这里的资源利用率只是根据某个 slot 所在的 TaskManager 中剩下多少个能够分配该 execution vertex 的
slot 计算出的,
(因为 Flink 要求同一 job vertex 的并行任务不能分配到同一 slot 中),能分配的越多,资源利用率越小,否则利用率越大。
而不是指实际的CPU内存等资源利用率。
 
对于 ResourceManager 中的 SlotManager 组件(这里说的都是 Standalone 模式下的
ResourceManager),
由于 JobMaster 的 slot 都是要向 resource manager 申请的。如果 JobMaster 需要新的 slot 了,会向
ResourceManager 的 SlotManager 组件申请。
如果没有配置 cluster.evenly-spread-out-slots 的话,SlotManager 从可用 slot 中随机返回一个。
如果配置了 cluster.evenly-spread-out-slots,SlotManager 会返回资源利用率最小的一个 slot。
这里的资源利用率计算方式是:看某个 slot 所在的 TaskManager 中有多少 slot 还没有被分配,空闲的越多,利用率越小,否则越大。
 
最后,你提问中说的均衡我没有太理解。某个算子的并发子任务是不会被分配到同一个slot中的,
但如果想把这些子任务均匀分配到不同机器上,这个当前的调度算法应该是无法保证的。
 
Best,
Shawn Huang
 
 
赵一旦 <[hidden email]> 于2020年11月5日周四 下午10:18写道:
 
> 有没有人对cluster.evenly-spread-out-slots参数了解比较深入的给讲解下。
>
> 我主要想知道,设置这个参数为true之后。Flink是以一个什么样的规则去尽可能均衡分配的。
> standalone集群模式下,每个机器性能相同,flink slot数量配置相同情况下。基于*这种分配规则*,有没有一种方法让Flink做到
> *完全均衡*,而*不是尽可能均衡*?
>
> 此外,我说的“均衡”都特指算子级别的均衡。不要5机器一共5个slot,然后任务有5个算子,每个算子单并发并且通过不同的share
> group各独占1个slot这种均衡。我指的是每个算子都均衡到机器(*假设并发设置合理*)。
>