Я управляю кластером Hadoop, который используется несколькими пользователями. Мы часто выполняем работы с очень медленными картостроителями. Например, у нас может быть файл предложений объемом 32 ГБ (по одному предложению на строку), который мы хотим проанализировать в НЛП (что занимает, скажем, 100 мс на предложение). Если размер блока составляет 128 МБ, это 250 картографов. Это заполняет наш довольно небольшой кластер (9 узлов на 12 сопоставителей на узел - это 108 сопоставителей), но для каждого сопоставителя требуется очень много времени (часов).
Проблема в том, что если кластер пуст и такая работа запущена, он использует все сопоставители в кластере. Затем, если кто-то еще хочет выполнить короткую работу, она блокируется на несколько часов. Я знаю, что более новые версии Hadoop поддерживают вытеснение в Fair Scheduler (мы используем Capacity Scheduler), но более новые версии также нестабильны (я с нетерпением жду следующего выпуска).
Раньше была опция , указывающая количество картографов , но теперь JobConf устарела (странно, что не устарела в 0,20.205 ) , Это уменьшило бы проблему, потому что при большем количестве картографов каждая задача карты работала бы с меньшим набором данных и, таким образом, заканчивалась раньше.
Есть ли способ обойти эту проблему в 0.20.203? Нужно ли создавать подкласс моего InputFormat (в данном случае TextInputFormat)? Если да, что именно мне нужно указать?