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