我知道有类似的问题,例如:
但是我问这个是因为我正在寻找一个更具体的区别,有几个用例可以支持。
所以,我是一个python用户,想要制作两个/两个的程序:
在一台计算机上执行,并在多台计算机上处理它们。我熟悉python中的(单机)多处理软件包,我现在正在编写mapreduce样式代码。我知道我的功能很容易并行化。
在询问我常见的智能CS建议提供者时,我的问题是:
“我想接受一项任务,将其分成一堆在一堆机器上同时执行的子任务,然后将这些结果聚合并根据其他一些功能处理,这可能是一个减少,或者例如,可以是串行添加到数据库的指令。“
根据我的用例的分解,我认为我同样可以使用Hadoop或一组Celery工作者+ RabbitMQ经纪人。然而,当我问圣人的建议提供者时,他们回应我,好像我完全疯狂地将Hadoop和Celery视为可比较的解决方案。我已经阅读了很多关于Hadoop的内容,以及关于Celery的内容---我认为我对这两者的作用非常了解 - 我似乎不理解的是:
我理解Hadoop是大数据标准,但Celery也看起来很受支持;我感谢它不是java(流式API python必须用于hadoop看起来对我不舒服),所以我倾向于使用Celery选项。
答案 0 :(得分:23)
它们是相同的,因为可以解决您描述的问题(map-reduce)。它们的不同之处在于,Hadoop完全构建为仅解决该用例并构建Celey / RabbitMQ以便使用消息传递在不同节点上执行Task执行。芹菜也支持不同的用例。
Hadoop通过拥有一个庞大而特殊的文件系统来解决map-reduce问题,映射器从中获取数据,将其发送到一堆映射节点并将其减少到该文件系统。这样做的好处是它可以很快地完成这项工作。缺点是它只能在基于文本的数据输入上运行,Python实际上不受支持,如果你不能(略微)不同的用例。 Celery是一个基于消息的任务执行器。在其中,您可以在工作流(可以是map-reduce工作流程)中定义任务并将它们组合在一起。它的优点是它是基于python的,你可以在自定义工作流程中将任务拼接在一起。缺点是它依赖于单个经纪人/结果后端及其设置时间。
因此,如果您有几个Gb的日志文件并且不关心用Java编写并且有一些专门用于运行Hadoop的服务器,请使用它。如果您希望灵活地运行工作流程任务,请使用Celery。或.....
是的!来自其中一家公司的新项目帮助创建了RabbitMQ(和其他公司)使用的消息传递协议AMQP。它被称为ZeroMQ,与Celery相比,它通过奇怪地降低抽象级别将分布式消息传递/执行提升到了一个新的水平。它定义了可以通过各种方式链接在一起的套接字,以在节点之间创建消息传递链接。您想要对这些消息做任何事都取决于您的编写。虽然这可能听起来像“套接字周围的薄包装有什么好处”,但它实际上处于正确的抽象层次。现在,在我们公司,我们正在考虑所有芹菜消息并用ZeroMQ重建它。我们发现Celery对于应该如何执行任务以及一般来说设置/配置是一种痛苦过于自以为是。中间那个必须处理所有流量的经纪人也成了很大的瓶颈。
恢复: