Я знаю, что к этому есть похожие вопросы, такие как:
- https://stackoverflow.com/info/8232194/pros-and-cons-of-celery-vs-disco-vs-hadoop-vs-other-distributed-computing-packag
- Различают сельдерей, комбу, PyAMQP и RabbitMQ/ironMQ
но я спрашиваю об этом, потому что я ищу более конкретное различие, поддерживаемое несколькими примерами использования, пожалуйста.
Итак, я пользователь python, который хочет создавать программы, которые либо/оба:
- Слишком большие для
- Слишком долго для
делать на одной машине и обрабатывать их на нескольких машинах. Я знаком с пакетом многопроцессорности (single-machine) в python, и теперь я пишу код стиля mapreduce. Я знаю, что моя функция, например, легко распараллеливается.
Обращаясь к моим обычным умным консультантам CS, я сформулировал свой вопрос как:
"Я хочу выполнить задачу, разбить ее на кучу подзадач, которые выполняются одновременно на связке машин, затем эти результаты будут агрегированы и обработаны в соответствии с некоторой другой функцией, которая может быть уменьшена или могут быть инструкциями для серийного добавления к базе данных, например."
В соответствии с этим разрывом моего прецедента, я думаю, что я мог бы в равной степени использовать Hadoop или набор работников Celery + RabbitMQ broker. Однако, когда я прошу совета у мудрецов, они реагируют на меня так, как будто я совершенно сумасшедший, чтобы взглянуть на Hadoop и Celery как на сопоставимые решения. Я довольно много читал о Hadoop, а также о Celery. Я думаю, что у меня довольно хорошее понимание того, что оба делают --- то, что я, похоже, не понимаю:
- Почему они считаются такими раздельными, настолько разными?
- Учитывая, что они, похоже, воспринимаются как совершенно разные технологии - каким образом? Каковы варианты использования, которые отличают один от другого или лучше для другого?
- Какие проблемы могут быть решены с обеих сторон, и в каких областях было бы особенно глупо использовать один или другой для?
- Существуют ли, возможно, лучшие, более простые способы достижения мультипроцессорности, такие как Pool.map() - функциональность для нескольких машин? Представьте себе, что моя проблема не ограничена хранением, а ЦП и ОЗУ, необходимыми для расчета, поэтому нет необходимости иметь слишком мало места для хранения результатов, возвращаемых рабочими. (т.е. я делаю что-то вроде моделирования, где мне нужно генерировать много вещей на небольших машинах, засеянных значением из базы данных, но они уменьшаются до того, как они вернутся к исходной машине/базе данных.)
Я понимаю, что Hadoop - это большой стандарт данных, но Сельдерей также выглядит хорошо поддержанным; Я ценю, что это не java (потоковый API-интерфейс python для использования для хаопа выглядел неудобным для меня), поэтому я был бы склонен использовать параметр Celery.