We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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
现阶段的作业调度平衡算法,是基于域下作业分片负荷加权总和均匀为目的的。不区分作业,只有作业负荷这个变量。 上述算法的结果,可能导致存在这样的作业,其分片不是均匀分配给Executor的。 如果该作业消耗资源高,我们会尝试将其负荷调大,从而达到平均分配的目的。但是,如果存在多个作业消耗资源都很高,那么负荷就不是那么好用了。而且需要大量的手工操作。 所以,需要提供一种新的算法,将作业的分片平均分配给Executor。
算法保持不变
新机器的红色作业上线,模拟图如下:
阶段一:1台机器,红色作业有2个分片,绿色作业有2个分片。 阶段二:1台旧机器,1台新机器对红色作业上线。基于executor总负荷平均的算法,结果是,红色作业的2个分片都被分配到新机器。
阶段一:1台机器,红色作业有3个分片,绿色作业有2个分片,蓝色作业有1个分片。 阶段二:1台旧机器,1台新机器对红色作业上线。基于executor的红色作业负荷平均的算法,结果是,2台机器分别得到红色作业的1个分片。
第3台机器的红色作业下线,模拟图如下:
阶段一:3台机器,红色作业有2个分片,绿色作业有2个分片、且设置了优先节点为第1台机器。 阶段二:第3台机器对红色作业下线。基于executor总负荷平均的算法,结果是,第3台机器的红色分片被分配给了第2台机器。
阶段一:3台机器,红色作业有2个分片,绿色作业有2个分片、且设置了优先节点为第1台机器。 阶段二:第3台机器对红色作业下线。基于executor的红色作业负荷平均的算法,结果是,第3台机器的红色分片被分配给了第1台机器。为什么呢?因为第1、2台机器应该分别得到2个红色分片。
红色作业启用,模拟图如下:
阶段一:2台机器,绿色作业有2个分片,绿色作业设置了优先executor为第2台机器。 阶段二:红色作业有2个分片,启用红色作业。基于executor总负荷平均的算法,结果是,红色作业的2个分片都被分配到第1台机器。
阶段一:2台机器,绿色作业有2个分片,绿色作业设置了优先executor为第2台机器。 阶段二:红色作业有2个分片,启用红色作业。基于executor的红色作业负荷平均的算法,结果是,2台机器分别得到红色作业的1个分片。
算法不变
摘取算法不变。 放回算法改变:放回到总负荷最小的Executor -> 放回到该作业总负荷最小的Executor。
摘取算法改变,与Executor作业上线相同。 放回算法改变:放回到总负荷最小的Executor -> 放回到该作业总负荷最小的Executor。
The text was updated successfully, but these errors were encountered:
#669 sharding enhancement
d0b76b9
#669 add code review comment
bde3247
能否减少/合并sharding的次数?实际上在executor陆续上线的过程中是会产生大量jobServer online事件,而这些事件是否都是必要的?
Sorry, something went wrong.
@kfchu 如果想减少响应事件次数,执行的算法,简单地用”全量分片“就行,减少复杂度,没必要针对不同的事件。 如此的话,改动较大,如果有必要,放到以后再做吧。
heziai
No branches or pull requests
背景
现阶段的作业调度平衡算法,是基于域下作业分片负荷加权总和均匀为目的的。不区分作业,只有作业负荷这个变量。
上述算法的结果,可能导致存在这样的作业,其分片不是均匀分配给Executor的。
如果该作业消耗资源高,我们会尝试将其负荷调大,从而达到平均分配的目的。但是,如果存在多个作业消耗资源都很高,那么负荷就不是那么好用了。而且需要大量的手工操作。
所以,需要提供一种新的算法,将作业的分片平均分配给Executor。
场景
Executor上线
算法保持不变
Executor下线
算法保持不变
Executor作业上线
新机器的红色作业上线,模拟图如下:
旧算法
阶段一:1台机器,红色作业有2个分片,绿色作业有2个分片。
阶段二:1台旧机器,1台新机器对红色作业上线。基于executor总负荷平均的算法,结果是,红色作业的2个分片都被分配到新机器。
新算法
阶段一:1台机器,红色作业有3个分片,绿色作业有2个分片,蓝色作业有1个分片。
阶段二:1台旧机器,1台新机器对红色作业上线。基于executor的红色作业负荷平均的算法,结果是,2台机器分别得到红色作业的1个分片。
Executor作业下线
第3台机器的红色作业下线,模拟图如下:
旧算法
阶段一:3台机器,红色作业有2个分片,绿色作业有2个分片、且设置了优先节点为第1台机器。
阶段二:第3台机器对红色作业下线。基于executor总负荷平均的算法,结果是,第3台机器的红色分片被分配给了第2台机器。
新算法
阶段一:3台机器,红色作业有2个分片,绿色作业有2个分片、且设置了优先节点为第1台机器。
阶段二:第3台机器对红色作业下线。基于executor的红色作业负荷平均的算法,结果是,第3台机器的红色分片被分配给了第1台机器。为什么呢?因为第1、2台机器应该分别得到2个红色分片。
作业启用
红色作业启用,模拟图如下:
旧算法
阶段一:2台机器,绿色作业有2个分片,绿色作业设置了优先executor为第2台机器。
阶段二:红色作业有2个分片,启用红色作业。基于executor总负荷平均的算法,结果是,红色作业的2个分片都被分配到第1台机器。
新算法
阶段一:2台机器,绿色作业有2个分片,绿色作业设置了优先executor为第2台机器。
阶段二:红色作业有2个分片,启用红色作业。基于executor的红色作业负荷平均的算法,结果是,2台机器分别得到红色作业的1个分片。
作业禁用
算法不变
Executor流量摘取
摘取算法不变。
放回算法改变:放回到总负荷最小的Executor -> 放回到该作业总负荷最小的Executor。
Executor流量恢复
摘取算法改变,与Executor作业上线相同。
放回算法改变:放回到总负荷最小的Executor -> 放回到该作业总负荷最小的Executor。
作业重排
摘取算法不变。
放回算法改变:放回到总负荷最小的Executor -> 放回到该作业总负荷最小的Executor。
全量分片
摘取算法不变。
放回算法改变:放回到总负荷最小的Executor -> 放回到该作业总负荷最小的Executor。
The text was updated successfully, but these errors were encountered: