Предыдущие ответы не обязательно верны для вашей ситуации. Это правда, что если у вас есть множество ключей редукции и ваш набор данных не сильно смещен в сторону одного из них, а этапы перетасовки и/или редукции являются узким местом в вашей работе, и у вас есть несколько ядер, доступных для использования в качестве редукторов, то добавление большего количества редукторов поможет. В Pig вы можете указать номер, который хотите использовать, с предложением PARALLEL
.
Как уже упоминалось, есть случаи, когда добавление дополнительных редукторов вам не поможет:
- У вас есть один ключ сокращения для большинства ваших данных. Если большая часть ваших данных приводит к одному и тому же ключу сокращения, все выходные данные карты для этого ключа будут отправлены в один редуктор. Если вы добавите больше редюсеров, вы обнаружите, что другие завершаются очень быстро, но этот редуктор по-прежнему требует очень много времени для завершения. Если это происходит во время Pig
JOIN
, вы можете обойти эту проблему с помощью предложения USING 'skewed'
.
- Основным узким местом является чтение данных на этапе сопоставления и их обработка. Вы говорите, что у вас есть 550 ГБ данных. Сколько картографов вы используете? Сколько времени они занимают, чтобы закончить? Добавление большего количества редукторов может только ускорить перетасовку и уменьшить количество фаз.
- Вы работаете с небольшим кластером, в котором для задач сокращения доступно очень мало ядер. Если вы настроили локальный кластер Hadoop на своем компьютере, скорее всего, у вас не более 1 или 2 выделенных ядер. сократить задачи. Следовательно, запуск большего количества редукторов будет просто означать, что эти дополнительные редукторы должны ждать своей очереди для процессорного времени, и вы не будете двигаться быстрее.
Помимо добавления редьюсеров, еще один способ ускорить выполнение ваших заданий — сократить любой ненужный вывод карты. Весь вывод карты записывается на диск, затем распределяется по редюсерам, где снова записывается на диск. Дисковый ввод-вывод очень медленный, и если большая часть ваших данных не нужна, выбросьте их на этапе сопоставления. В Pig, например, вы можете просто посчитать количество записей для каждого ключа. В этом случае все данные, кроме ключа, следует выбросить.
Как правило, количество мапперов выбирается автоматически. Есть приемы, которые вы можете использовать, если считаете, что количество картостроителей слишком мало. Например, вы можете обнаружить, что Pig слишком агрессивен в объединении входных файлов, так что у вас есть только один или два преобразователя, которые занимают много времени. В этом случае вы можете SET pig.maxCombinedSplitSize
увеличить число. Но обычно количество картографов находится вне вашего контроля.
Количество редукторов, которые вы хотите использовать, зависит от доступных вам ресурсов (например, сколько редукторов можно использовать одновременно? Это нормально, если ваша работа занимает все редукторы в кластере в течение длительного времени?) и характер ваших данных (т. е. они сильно перекошены в сторону одного ключа сокращения?). Также обратите внимание, что у вас будет один выходной файл для каждого редуктора, поэтому в некоторых случаях может возникнуть проблема с большим количеством редукторов.
person
reo katoa
schedule
22.04.2014