用于 Map-Reduce 的 Celery 或 Python 中的其他替代品?

Leo*_*nth 5 python mapreduce disco celery

我有非常适合在 map-and-reduce 模型下运行的昂贵作业(长话短说,它是聚合以前通过一些耗时的算法计算的数百个排名)。

我想并行化集群上的作业(不仅仅是多处理),并专注于 2 个实现:CeleryDisco。Celery 不支持开箱即用的 naive map-and-reduce,尽管使用 TaskSets 可以轻松完成“map”部分,但您如何有效地实现“reduce”部分?

(我对disco的问题是它不能在Windows上运行,而且我已经为程序的另一部分设置了celery,所以运行另一个map-reduce框架似乎相当不雅。)

小智 2

基本上,您需要获取一个任务的输出并将输出应用为另一任务的输入。芹菜在这方面不太方便。

以 celery 方式,您可以拥有一个定期任务调度程序,以异步方式执行作业(映射部分),并保留任务引用本身(如果是单台计算机)或将引用发布到数据库后端(redis/mongo/等)。您可能需要调度程序来收集此结果并应用于reduce 函数。

我想说的是,您在所有集群上运行自己的用于map和reduce的python进程,并确保将结果存储在像redis这样的内存数据库中,并使用celery在map和reduce上执行任务。您的主要流程将收集并合并结果。