有appengine-mapreduce这似乎是在AppEngine上做事的官方方式。但除了一些黑客攻击的Wiki页面和冗长的视频之外,似乎没有文档。有些声明lib只支持map
步骤。但是来源表明还有shuffle的实现。
此appengine-mapreduce库的一个版本似乎也包含在SDK中,但它不受公众使用的祝福。因此,您基本上应该将库加载到运行时两次。
然后有appengine-pipeline。 “API的主要用例是将各种App Engine MapReduces连接到计算管道中。”但是appengine-mapreduce库中似乎也出现了与管道相关的代码。
那么我从哪里开始了解这一切是如何组合在一起的呢?哪个是我的项目调用的库。除了解析更改日志之外,还有关于appengine-mapreduce的文档吗?
答案 0 :(得分:11)
从我的项目调用哪个库。
它们用于不同的目的,并且您没有提供有关您尝试做什么的详细信息。
这里最基本的层是任务队列,它允许您安排可以高度并行化的后台工作。这是扇动。假设您有一个包含1000个网站的列表,并且您想检查每个网站的响应时间,并发送任何需要超过5秒钟加载的网站的电子邮件。通过将这些作为并发任务运行,您可以比按顺序检查所有1000个站点更快地完成工作。
现在假设你不想为每个慢速网站发送电子邮件,你只想检查所有1000个网站并发送一封摘要电子邮件,说明有多少花了超过5秒,有多少花了更少。这是粉丝。任务队列比较棘手,因为你需要知道所有任务何时完成,你需要收集和总结他们的结果。
输入Pipeline API。 Pipeline API抽象了任务队列,使扇入更容易。您编写的内容看起来像同步,过程代码,但使用Python期货并且并行执行(尽可能多)。 Pipeline API跟踪任务依赖性并收集结果以便于构建分布式工作流。
MapReduce API包装Pipeline API以促进特定类型的分布式工作流:将一件作品的结果映射到一组键/值对,并通过组合它们的值将多组结果减少为一。 / p>
因此,它们围绕分布式任务执行的通用系统提供了越来越多的抽象和便利。正确的解决方案取决于您要完成的任务。
答案 1 :(得分:-1)