Hadoop公平调度器算法解析(2)

在每个pool中,将其拥有的slot按作业的权重分配给各个作业(由步骤(1)完成),分完之后将剩余的slot按作业的权重和缺额分配给仍需slot的作业(由步骤(2)和(3)完成),如果还有slot剩余,则将这些slot共享给其他pool。

初始化:

当前所有作业的最小共享量置零

pool的minMaps数或者minReduces数(由用户在配置文件中设定)

重复以下几步,直到slotsLeft=0:

(1)计算每个job的最小共享量:jobinfo.minMaps或jobinfo.minReduces

首先计算该作业可获得的共享值:

根据当前pool的剩余slot数,调整该共享值:

其中runnableNum表示作业尚需的slot数与正在运行的slot数之和,curMin表示作业的当前最小共享量(jobinfo.minMaps或jobinfo.minReduces),初始值为0。

slotsToGive作为最小共享量赋予相应的job。

修改值为值减去slotsToGive

如果此轮循环中,slotsLeft值未变,即没有slot分给任何作业,则将剩余的slot共享给pool中所有job,即,执行(2)(3)并结束算法:

(2)将pool中的job按weight和deficit排序

(3)按顺序依次计算每个job的最小共享量。

首先计算该作业可获得的共享值:

根据当前pool的剩余slot数,调整该共享值:

slotsToGive作为最小共享量赋予相应的job。

修改slotsLeft值为slotsLeft值减去slotsToGive

需要注意的是,当执行完(2)(3)后,slotsLeft可能仍大于0,这时候会将剩余的slotsLeft个slot共享给其他pool。

5) 更新公平共享量

主要思想:基于作业权重和最小共享量计算公平共享量。首先,根据权重分配可用slot数,如果作业的最小共享量大于公平共享量,先要满足最小共享量,更新可用slot数,重复以上步骤,直到所有作业的最小共享量小于或等于公平共享量,这样,每个作业的最小共享量都得到了满足,最后,所有作业平分剩下的slot数。

算法实现:

初始化:当前所有作业的公平共享量置零;slotsLeft={系统中map slot 或者reduce slot 总数};jobsLeft={系统中正在运行的作业}

(1)遍历集合jobsLeft中的所有作业,计算每个作业的jobFairShare

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/psxzf.html