Celery для Map-Reduce или другие альтернативы в Python?

У меня есть дорогостоящие задания, которые очень подходят для запуска в рамках модели map-and-reduce (короче говоря, это объединение нескольких сотен рейтингов, которые предварительно рассчитываются с помощью какого-то трудоемкого алгоритма).

Я хотел распараллелить задания в кластерах (а не просто многопроцессорность) и сосредоточился на двух реализациях: Celery и Дискотека. Celery не поддерживает наивную карту и уменьшение из коробки, и хотя часть «карты» легко выполняется с помощью наборов задач, как эффективно реализовать часть «сокращения»?

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


person Leonth    schedule 29.07.2011    source источник


Ответы (2)


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

С помощью сельдерея у вас может быть планировщик периодических задач, который выполняет задания (часть карты) асинхронно и сохраняет саму ссылку на задачу, если это один компьютер, или публикует ссылку на серверную часть БД (redis/mongo/etc). Вам могут понадобиться планировщики для сбора этого результата и применения к функциям сокращения.

Я бы сказал, что вы запускаете свои собственные процессы Python для карты и уменьшения во всех кластерах и убедитесь, что вы сохраняете результат в памяти db, например Redis, и используете сельдерей для выполнения задач на карте и уменьшения. Ваш основной процесс будет собирать и объединять результаты.

person Community    schedule 29.07.2011

Пожалуйста, взгляните на следующий блог.

http://mikecvet.wordpress.com/2010/07/02/parallel-mapreduce-in-python/

person Arshad Ansari    schedule 27.08.2013