Итеративный MapReduce - PullRequest
       15

Итеративный MapReduce

3 голосов
/ 27 декабря 2010

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

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

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

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

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

Ответы [ 4 ]

1 голос
/ 15 июля 2012

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

0 голосов
/ 18 января 2011

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

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

0 голосов
/ 31 января 2011

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

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

Вы можете проверить пример здесь - http://www.mail-archive.com/user@pig.apache.org/msg00672.html

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

0 голосов
/ 30 декабря 2010

В интерфейсе Java Hadoop есть концепция объединения нескольких заданий: http://developer.yahoo.com/hadoop/tutorial/module4.html#chaining

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

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

...