我知道有类似的问题,例如:
- https://stackoverflow.com/questions/8232194/pros-and-cons-of-celery-vs-disco-vs-hadoop-vs-other-distributed-computing-packag
- 区分 celery、kombu、PyAMQP 和 RabbitMQ/ironMQ
但我问这个是因为我正在寻找一个由几个用例示例支持的更特别的区别,拜托。
所以,我是一个 python 用户,想要制作一个/两个的程序:
- 太大而无法
- 花费太长时间
在一台机器上做,并在多台机器上处理它们。我熟悉python中的(单机)多处理包,我现在正在编写mapreduce风格的代码。例如,我知道我的函数很容易并行化。
在询问我通常的聪明的 CS 建议提供者时,我将我的问题表述为:
“我想拿一个任务,把它分成一堆子任务,在一堆机器上同时执行,然后把这些结果聚合起来,根据其他一些函数来处理,可能是reduce,也可能是指令例如,串行添加到数据库中。”
根据我的用例的分解,我认为我同样可以使用 Hadoop 或一组 Celery worker + RabbitMQ 代理。然而,当我向贤明的建议提供者询问时,他们的回答好像我完全疯了,将 Hadoop 和 Celery 视为可比较的解决方案。我已经阅读了很多关于 Hadoop 和 Celery 的文章——我认为我对两者的作用有很好的了解——我似乎不明白的是:
- 为什么他们被认为如此独立,如此不同?
- 鉴于它们似乎被视为完全不同的技术——以什么方式?有哪些用例可以区分一个或一个比另一个更好?
- 两者都可以解决什么问题,将其中一个用于哪些领域会特别愚蠢?
- 是否有更好、更简单的方法来为多台机器实现类似于 Pool.map() 的多处理功能?让我们想象一下,我的问题不受存储限制,而是受计算所需的 CPU 和 RAM 的限制,因此没有空间太小来容纳从工作人员返回的结果是没有问题的。(即,我正在做类似模拟的事情,我需要在由数据库中的值播种的较小机器上生成很多东西,但在它们返回到源机器/数据库之前,这些东西会被减少。)
我知道 Hadoop 是大数据标准,但 Celery 看起来也得到了很好的支持;我很欣赏它不是 java(用于 hadoop 的流式 API python 对我来说看起来不舒服),所以我倾向于使用 Celery 选项。