Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

作业调度算法优化 #669

Open
heziai opened this issue Jan 16, 2020 · 2 comments
Open

作业调度算法优化 #669

heziai opened this issue Jan 16, 2020 · 2 comments

Comments

@heziai
Copy link
Member

heziai commented Jan 16, 2020

背景

现阶段的作业调度平衡算法,是基于域下作业分片负荷加权总和均匀为目的的。不区分作业,只有作业负荷这个变量。
上述算法的结果,可能导致存在这样的作业,其分片不是均匀分配给Executor的。
如果该作业消耗资源高,我们会尝试将其负荷调大,从而达到平均分配的目的。但是,如果存在多个作业消耗资源都很高,那么负荷就不是那么好用了。而且需要大量的手工操作。
所以,需要提供一种新的算法,将作业的分片平均分配给Executor。

场景

Executor上线

算法保持不变

Executor下线

算法保持不变

Executor作业上线

新机器的红色作业上线,模拟图如下:

旧算法

阶段一:1台机器,红色作业有2个分片,绿色作业有2个分片。
阶段二:1台旧机器,1台新机器对红色作业上线。基于executor总负荷平均的算法,结果是,红色作业的2个分片都被分配到新机器。
image

新算法

阶段一:1台机器,红色作业有3个分片,绿色作业有2个分片,蓝色作业有1个分片。
阶段二:1台旧机器,1台新机器对红色作业上线。基于executor的红色作业负荷平均的算法,结果是,2台机器分别得到红色作业的1个分片。
image

Executor作业下线

第3台机器的红色作业下线,模拟图如下:

旧算法

阶段一:3台机器,红色作业有2个分片,绿色作业有2个分片、且设置了优先节点为第1台机器。
阶段二:第3台机器对红色作业下线。基于executor总负荷平均的算法,结果是,第3台机器的红色分片被分配给了第2台机器。
image

新算法

阶段一:3台机器,红色作业有2个分片,绿色作业有2个分片、且设置了优先节点为第1台机器。
阶段二:第3台机器对红色作业下线。基于executor的红色作业负荷平均的算法,结果是,第3台机器的红色分片被分配给了第1台机器。为什么呢?因为第1、2台机器应该分别得到2个红色分片。
image

作业启用

红色作业启用,模拟图如下:

旧算法

阶段一:2台机器,绿色作业有2个分片,绿色作业设置了优先executor为第2台机器。
阶段二:红色作业有2个分片,启用红色作业。基于executor总负荷平均的算法,结果是,红色作业的2个分片都被分配到第1台机器。
image

新算法

阶段一:2台机器,绿色作业有2个分片,绿色作业设置了优先executor为第2台机器。
阶段二:红色作业有2个分片,启用红色作业。基于executor的红色作业负荷平均的算法,结果是,2台机器分别得到红色作业的1个分片。
image

作业禁用

算法不变

Executor流量摘取

摘取算法不变。
放回算法改变:放回到总负荷最小的Executor -> 放回到该作业总负荷最小的Executor。

Executor流量恢复

摘取算法改变,与Executor作业上线相同。
放回算法改变:放回到总负荷最小的Executor -> 放回到该作业总负荷最小的Executor。

作业重排

摘取算法不变。
放回算法改变:放回到总负荷最小的Executor -> 放回到该作业总负荷最小的Executor。

全量分片

摘取算法不变。
放回算法改变:放回到总负荷最小的Executor -> 放回到该作业总负荷最小的Executor。

@heziai heziai self-assigned this Jan 16, 2020
heziai added a commit that referenced this issue Jan 16, 2020
@heziai heziai added this to the 3.4.0 milestone Jan 19, 2020
kfchu added a commit that referenced this issue Feb 2, 2020
@kfchu
Copy link
Contributor

kfchu commented Feb 2, 2020

能否减少/合并sharding的次数?实际上在executor陆续上线的过程中是会产生大量jobServer online事件,而这些事件是否都是必要的?

@heziai
Copy link
Member Author

heziai commented Feb 3, 2020

@kfchu 如果想减少响应事件次数,执行的算法,简单地用”全量分片“就行,减少复杂度,没必要针对不同的事件。 如此的话,改动较大,如果有必要,放到以后再做吧。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants