我有一些非常适合在map-and-reduce模型下运行的昂贵作业(长话短说,它是将以前通过一些耗时算法计算的几百个排名聚合在一起)。
我想在集群上并行化作业(不仅仅是多处理),并专注于两个实现:芹菜和迪斯科。芹菜不支持简单的map-and-reduce,尽管"map"部分很容易用taskset完成,你如何有效地实现"reduce"部分?
(我使用disco的问题是它不能在Windows上运行,并且我已经为程序的另一部分设置了芹菜,因此为map-reduce运行另一个框架似乎相当不优雅。)
基本上,您需要将一个任务的输出作为输入应用到另一个任务。芹菜在这方面不方便。
以一种方式,你可以有一个定期任务调度程序,以异步方式执行任务(映射部分),如果它是单台计算机,则保留任务引用本身,或者将引用发布到DB后端(redis/mongo/等)。您可能需要调度器来收集此结果并应用于reduce函数。
我会说你在所有集群上运行你自己的python进程map和reduce,并确保你将结果存储在内存数据库中,如redis,并使用芹菜来执行map和reduce上的任务。您的主进程将收集并组合结果。
请看下面的博客。
http://mikecvet.wordpress.com/2010/07/02/parallel-mapreduce-in-python/