2010-12-27 3 views
3

Я написал простой k-мерный код кластеризации для Hadoop (две отдельные программы - картограф и редуктор). Код работает над небольшим набором данных из 2d точек в моем локальном поле. Он написан на Python, и я планирую использовать Streaming API.Итеративный MapReduce

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

После каждого запуска преобразователя и редуктора создаются новые центры. Эти центры вводятся для следующей итерации.

Из того, что я вижу, каждая итерация каждого из них должна быть отдельной работой по созданию карты. И похоже, что мне придется написать еще один скрипт (python/bash), чтобы извлечь новые центры из HDFS после каждой фазы сокращения и передать его обратно в mapper.

Любые другие более простые, менее грязные способы? Если кластер использует справедливый планировщик, это будет очень долго, пока это вычисление не завершится?

ответ

0

Чувствуется смешно отвечать на мой вопрос. Я использовал PIG 0.9 (еще не выпущен, но доступен в багажнике). В этом есть поддержка модульности и управления потоком, позволяющая встраивать PIG-выражения внутри языков сценариев, таких как Python.

Итак, я написал основной скрипт python, в котором был цикл, и внутри, который назывался моими скриптами PIG. Сценарии PIG заставляли звонить в UDF. Поэтому пришлось написать три разных программы. Но все получилось отлично.

Вы можете проверить пример здесь - http://www.mail-archive.com/[email protected]/msg00672.html

Для записи, мои UDFs были также написаны на Python, используя эту новую функцию, которая позволяет писать UDF, на языках сценариев.

0

Java-интерфейс Hadoop имеет концепцию цепочки несколько заданий: http://developer.yahoo.com/hadoop/tutorial/module4.html#chaining

Однако, так как вы используете Hadoop Streaming вы не имеете никакой поддержки цепочки заданий и управление рабочими процессами.

Вы должны оформить Oozie, который должен сделать эту работу для вас: http://yahoo.github.com/oozie/

0

Вот несколько способов сделать это: github.com/bwhite/hadoop_vision/tree/master/kmeans

Также проверьте это (поддержка oozie): http://bwhite.github.com/hadoopy/

1

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

Смежные вопросы