Как увеличить количество редукторов в алгоритме кластеризации куполов

Я использую алгоритм кластеризации куполов, используя mahout.

Это команда, которую я запускаю в командной строке mahout.

mahout canopy -i /mahout/o_seqsparse/tfidf-vectors -o /mahout/o_canopy -dm org.apache.mahout.common.distance.SquaredEuclideanDistanceMeasure -ow -t1 100 -t2 50

Ниже приведен список запущенных задач map & reduce:

Количество выполняемых задач по карте → 6

Количество сокращений задач → 1

Но это занимает слишком много времени из-за одного редуктора. Я думаю, если я смогу увеличить количество задач сокращения, то я получу лучшую производительность.

Я также попытался с увеличением уменьшения карты с mapred-site.xml file mapred.map.tasks,mapred.reduce.tasks Но это не имеет никакого эффекта, но оно работает с 1 уменьшением.

2 ответа

Вы не указали версию mahout, которую используете. Но глядя на исходный код 0.4 здесь: http://grepcode.com/file/repo1.maven.org/maven2/org.apache.mahout/mahout-core/0.4/org/apache/mahout/clustering/canopy/CanopyDriver.java

Вы можете найти, что 1 редуктор жестко закодирован. Я не думаю, что вы можете переопределить его.

РЕДАКТИРОВАТЬ

Для версии 0.9, как вы указали, проверьте здесь http://grepcode.com/file/repo1.maven.org/maven2/org.apache.mahout/mahout-core/0.9/org/apache/mahout/clustering/canopy/CanopyDriver. java/ at line no. 354

job.setNumReduceTasks(1);

Измените это и создайте снова. Однако вывод карты должен быть отправлен на один редуктор.В случае кластеризации я не верю, что вы выиграете, увеличив количество редукторов.


Как говорит Абхирооп Саркар в своем ответе, использование одного редуктора жестко закодировано. Однако это не просто вопрос того, насколько вы выигрываете, используя один или несколько редукторов. Вы не должны использовать более одного редуктора, иначе алгоритм не будет работать правильно. Причина в том, что с помощью одного редуктора на этом этапе все центры купола будут сравниваться друг с другом, следя за тем, чтобы они не были "слишком близки" друг к другу.

Итак, то, что вы правильно указали как узкое место этого алгоритма, не может быть изменено. На самом деле, если у вас слишком много центров купола, у него также будет нехватка памяти. Не идеальное преобразование исходного последовательного алгоритма IMHO, так как оно не может полностью использовать параллельное программирование, но единственное, что доступно (и/или возможно) в MapReduce.

В двух словах, один редуктор используется для возврата центров купола друг от друга. Использование большего количества редукторов дало бы неправильные результаты.

licensed under cc by-sa 3.0 with attribution.