对于EMR 5.16.0(Hadoop 2.8.3)上的M / R作业,我具有以下FairScheduler配置:
这2个队列在根队列下。
我在queue1上启动了一个应用程序app1,鉴于没有其他任何东西在运行,该应用程序将占用100%的EMR集群。
虽然此queue1仍为100%,但我启动了一个新的应用程序app2。我的期望是app2正在等待app1的任务完成,然后,它接收到内存/ vcore。
不幸的是,在我的实验之后,我看到即使app1任务完成了,在某些情况下也没有将容器分配给app2,而是将app1的任务重新安排在其上。 app1和app2的M / R任务具有相同的内存/ vcore。所有配置(队列配置,mapreduce.map.memory.mb,mapreduce.reduce.memory.mb,mapreduce.map.cpu.vcores,mapreduce.reduce.cpu.vcores除外)均具有默认值。
最终,queue2达到了群集容量的75%,但是经过了太多的app1任务。
我尝试使用 fairSharePreemption ,但这会杀死app1中的任务,我不希望这样做。 我还尝试对队列使用drf schedulePolicy,但仍然不是我想要的结果。
您知道我可以尝试执行的任何配置,以便使app2等待app1任务,但是它接收到可用插槽,而无需app1重新计划其任何任务(再次)吗?