Объединение нескольких задач mapreduce в потоковую передачу Hadoop - PullRequest
7 голосов
/ 07 января 2011

Я нахожусь в сценарии, где у меня есть два задания mapreduce.Мне больше нравится Python, и я планирую использовать его для написания сценариев mapreduce и использовать потоковую передачу hadoop для того же.Есть ли удобная цепочка для обоих заданий, следующих за формой, когда используется потоковая передача hadoop?

Map1 -> Reduce1 -> Map2 -> Reduce2

Я слышал много методов для достижения этой целив Java, но мне нужно что-то для потоковой передачи Hadoop.

Ответы [ 4 ]

4 голосов
/ 07 января 2011

Вот отличный пост в блоге о том, как использовать каскадирование и потоковую передачу. http://www.xcombinator.com/2009/11/18/how-to-use-cascading-with-hadoop-streaming/

Значение здесь - вы можете смешивать Java (каскадные потоки запросов) с вашими пользовательскими операциями потоковой передачи в одном приложении. Я считаю это гораздо менее хрупким, чем другие методы.

Обратите внимание, что объект Cascade в Cascading позволяет связывать несколько потоков (через вышеупомянутое сообщение в блоге ваше потоковое задание станет MapReduceFlow).

Отказ от ответственности: я автор Cascading

3 голосов
/ 12 февраля 2011

Вы можете попробовать MRJob Yelp , чтобы выполнить свою работу. Это библиотека MapReduce с открытым исходным кодом, которая позволяет вам писать цепочечные задания, которые можно запускать поверх потоковой передачи Hadoop на вашем кластере Hadoop или EC2. довольно элегантный и простой в использовании, и имеет метод, называемый шагами, который вы можете переопределить, чтобы указать точную цепочку мапперов и редукторов, через которые вы хотите, чтобы ваши данные проходили.

Оформить заказ на https://github.com/Yelp/mrjob
и документация на http://packages.python.org/mrjob/

1 голос
/ 12 февраля 2011

Если вы уже пишете свой маппер и редуктор на Python, я бы подумал об использовании Dumbo, если такая операция проста.Последовательность ваших заданий сокращения карты, ваш картограф, редуктор и т. Д. Все в одном скрипте Python, который можно запустить из командной строки.

1 голос
/ 07 января 2011

Обычно способ, которым я делаю это с потоковой передачей Hadoop и Python, находится внутри моего bash-скрипта, который я создаю для запуска заданий в первую очередь. Я всегда запускаю из сценария bash, таким образом я могу получать электронные письма об ошибках и электронные письма об успехе и делать их более гибкими, передавая параметры из другого сценария Ruby или Python, упаковывая его, который может работать в более крупной системе обработки событий.

Итак, выходные данные первой команды (задания) являются входными данными для следующей команды (задания), которые могут быть переменными в вашем скрипте bash, передаваемыми в качестве аргумента из командной строки (просто и быстро)

Возможно, вы захотите проверить Oozie http://yahoo.github.com/oozie/design.html движок рабочего процесса для Hadoop, который также поможет в этом (поддерживает потоковую передачу, не проблема). У меня не было этого, когда я начинал, поэтому мне пришлось создавать свою собственную вещь, но это система kewl и она полезна !!!!

...