5

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

我想并行化集群上的作业(不仅仅是多处理),并专注于 2 个实现:CeleryDisco。Celery 不支持开箱即用的朴素 map-and-reduce,虽然“map”部分很容易使用 TaskSets 完成,但如何有效地实现“reduce”部分?

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

4

2 回答 2

2

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

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

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

于 2011-07-29T08:40:06.887 回答
0

请看下面的博客。

http://mikecvet.wordpress.com/2010/07/02/parallel-mapreduce-in-python/

于 2013-08-27T13:46:32.443 回答