Планирование заданий Hadoop вместе с заданиями с медленным отображением в 0.20.203 - PullRequest
1 голос
/ 16 ноября 2011

Я управляю кластером Hadoop, который используется несколькими пользователями. Мы часто выполняем работы с очень медленными картостроителями. Например, у нас может быть файл предложений объемом 32 ГБ (по одному предложению на строку), который мы хотим проанализировать в НЛП (что занимает, скажем, 100 мс на предложение). Если размер блока составляет 128 МБ, это 250 картографов. Это заполняет наш довольно небольшой кластер (9 узлов на 12 сопоставителей на узел - это 108 сопоставителей), но для каждого сопоставителя требуется очень много времени (часов).

Проблема в том, что если кластер пуст и такая работа запущена, он использует все сопоставители в кластере. Затем, если кто-то еще хочет выполнить короткую работу, она блокируется на несколько часов. Я знаю, что более новые версии Hadoop поддерживают вытеснение в Fair Scheduler (мы используем Capacity Scheduler), но более новые версии также нестабильны (я с нетерпением жду следующего выпуска).

Раньше была опция , указывающая количество картографов , но теперь JobConf устарела (странно, что не устарела в 0,20.205 ) , Это уменьшило бы проблему, потому что при большем количестве картографов каждая задача карты работала бы с меньшим набором данных и, таким образом, заканчивалась раньше.

Есть ли способ обойти эту проблему в 0.20.203? Нужно ли создавать подкласс моего InputFormat (в данном случае TextInputFormat)? Если да, что именно мне нужно указать?

Ответы [ 4 ]

1 голос
/ 16 ноября 2011

Другие мапперы не решат вашу проблему, если не хватает реальных физических ресурсов (то есть машин в кластере). Я бы попытался упаковать свои данные в меньшее количество входных файлов, чтобы избежать случайного поиска жесткого диска.

Редактировать : Хорошо, если вам нужно больше картографов, попробуйте разделить ваши данные на несколько небольших файлов или уменьшить размер блока.

1 голос
/ 17 ноября 2011

Не совсем уверен, если больше картостроителей решат вашу проблему. JobConf # setNumMapTasks не влияет на # на задачах карты, созданных для каждого задания.Даже в документе говорится, что это просто подсказка к структуре.Количество созданных задач на карте равно количеству входных разбиений для задания.Вот различные варианты уменьшения размера InputSplit и, следовательно, увеличения # InputSplits и увеличения # задач карты.

  • Уменьшите размер блока HDFS, изменив dfs.blocksize.Но это увеличит нагрузку на NameNode, так как он должен сохранять большую часть сопоставления файлов и блоков, а также увеличивается размер отчета DataBlock.Кроме того, hadoop fs -D fs.local.block.size=134217728 -put local_name remote_location изменит размер блока для новых файлов, помещенных в HDFS, старые файлы останутся как есть.Старые файлы должны быть извлечены из HDFS и помещены обратно с требуемым размером блока.

  • Используйте NLineInputFormat , чтобы контролировать количество строк ввода для каждой карты.,Для этого работа должна быть изменена.mapred.line.input.format.linespermap, который по умолчанию равен 1, должен быть определен.

  • Начиная с версии 0,21 mapreduce.input.fileinputformat.split.minsize и mapreduce.input.fileinputformat.split.maxsize были определены, но это с новым API MR.Расчет InputSplit выполняется на клиенте, поэтому он не может быть применен к клиентам Job.

Логика расчета размера InputSplit приведена ниже.

protected long computeSplitSize(long blockSize, long minSize, long maxSize) {  
    return Math.max(minSize, Math.min(maxSize, blockSize));  
}
1 голос
/ 16 ноября 2011

Я считаю, что вы должны быть в состоянии увеличить размер блока для этих файлов: если вы это сделаете, то, естественно, ваше приложение будет использовать гораздо меньше средств отображения.

Помните также, что в конфигурации задания есть параметр map.input.length.Это увеличит расщепления, так что у вас будет меньше картографов с большими входами.

0 голосов
/ 28 декабря 2011

Вам не нужно обновлять Hadoop для изменения планировщиков.Я имел успех в изменении планировщика по умолчанию на честный планировщик.Просто следуйте инструкциям на http://hadoop.apache.org/common/docs/r0.20.2/fair_scheduler.html

...