Я думаю, что проблема может быть вызвана тем, что опция maxRunningJobs не учитывается при вычислении общих ресурсов для заданий.Я думаю, что этот параметр обрабатывается после того, как слоты (от превышения задания) уже были назначены для треккинга задач.Это происходит каждые n секунд из метода UpdateThread.update () -> update Runability () из класса FairScheduler.Я полагаю, что в вашем случае через некоторое время задания из «среднего» и «большого» пулов получают больший дефицит, чем задания из «малого» пула, это означает, что следующая задача будет запланирована из задания в среднем или большом пуле.Когда задача запланирована, имеет место ограничение maxRunningJobs и переводит превышающие задания в нерабочее состояние.То же самое появляется в следующем обновлении.
Это только мое предположение после того, как я позаботился о каком-то источнике fscheduler.Если вы можете, я, вероятно, попытался бы удалить maxRunningJobs из конфигурации и посмотреть, как планировщик ведет себя без этого ограничения и если он занимает все ваши слоты ..
Кажется, что вес для пулов в моем мнении слишком высок,Вес 100 означает, что этот пул должен получить в 100 раз больше слотов, чем пул по умолчанию.Я бы попытался уменьшить это число несколькими факторами, если вы хотите иметь справедливое распределение между вашими пулами.В противном случае задания из других пулов будут запущены только тогда, когда они встретят свой дефицит (он рассчитывается на основе запущенных задач и minShare)
Другой вариант, почему задания голодают, может быть из-за планирования задержки, которое включено в fschedс целью улучшения вычислительной местности?Вероятно, это можно улучшить, увеличив коэффициент репликации, но я не думаю, что это ваш случай ..
некоторые документы по Fairscheduler ..