如果可用内存不能满足正在调度的作业的需要(在 TaskSchedulingMgr.getTaskFromQueue(...) 中),Hadoop CapacityScheduler 会在 TaskTracker 上保留插槽。但是,这会造成任何僵局吗?假设,我有来自两个不同队列的两个不同作业,每个地图任务需要 3 个插槽。每台机器只有 4 个地图槽。起初,当作业 1 被调度时,机器 A 上有 2 个可用槽,因此作业 1 保留这 2 个槽。稍后,当作业 2 在机器 A 上调度时,另外 2 个插槽可用,因此作业 2 保留剩余的两个插槽。在这种情况下,作业 1 或作业 2 都不会获得足够的插槽来在机器 A 上执行。
CapacityScheduler 中是否有任何方案可以防止这种情况发生?