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

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

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

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

2 ответа

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

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

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

Пожалуйста, посмотрите на следующий блог.

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

Другие вопросы по тегам