mapreduce—hadoop capacityscheduler插槽保留方案是否会导致死锁?

kb5ga3dv  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(346)

hadoop capacityscheduler如果可用内存不能满足正在调度的作业的需要(在taskschedulingmgr.gettaskfromqueue(…)中),则会在tasktracker上保留插槽。但是,这是否会造成任何死锁?假设我在两个不同的队列中有两个不同的作业,每个map任务需要3个槽。每台机器只有4个Map槽。首先,当计划作业1时,机器a上有2个可用的插槽,因此作业1保留这2个插槽。稍后,当作业2被安排在机器a上时,另外两个插槽可用,因此作业2保留其余两个插槽。在这种情况下,作业1或作业2都不会获得足够的插槽来在机器a上执行。
capacityscheduler中是否有任何方案阻止这种情况发生?

06odsfpq

06odsfpq1#

好问题!我也不知道答案,所以没有比运行它更好的方法来检查:)
让我们考虑一下这个故事的简化版本,我可以从两个方面来看待这个问题:
需要减少3个任务才能完成作业的减少阶段
减少需要三个虚拟内存插槽的任务
在这两种情况下,作业都会在一个作业之前/之后的几分之一秒发送到作业跟踪器。在这两种情况下,第二个作业都将被迫暂停,直到第一个作业完成。不会发生死锁。从第二阶段到完成阶段,资源一直处于匮乏状态。至于没有这种死锁的原因,我的“猜测”是“其他”当前未使用队列的“剩余未使用”资源被分配给正在运行的作业,以弥补运行该作业所需的资源。因此,第二个饥饿,使暂停。
当然#2的结果是每个任务一次运行一个,因为每个任务等待3个可用插槽,因此每个任务有效地一次执行一个。希望有帮助。

相关问题