地图的状态 - 减少Appengine?

时间:2011-12-07 07:30:13

标签: google-app-engine mapreduce

appengine-mapreduce这似乎是在AppEngine上做事的官方方式。但除了一些黑客攻击的Wiki页面和冗长的视频之外,似乎没有文档。有些声明lib只支持map步骤。但是来源表明还有shuffle的实现。

此appengine-mapreduce库的一个版本似乎也包含在SDK中,但它不受公众使用的祝福。因此,您基本上应该将库加载到运行时两次。

然后有appengine-pipeline。 “API的主要用例是将各种App Engine MapReduces连接到计算管道中。”但是appengine-mapreduce库中似乎也出现了与管道相关的代码。

那么我从哪里开始了解这一切是如何组合在一起的呢?哪个是我的项目调用的库。除了解析更改日志之外,还有关于appengine-mapreduce的文档吗?

2 个答案:

答案 0 :(得分:11)

  

从我的项目调用哪个库。

它们用于不同的目的,并且您没有提供有关您尝试做什么的详细信息。

这里最基本的层是任务队列,它允许您安排可以高度并行化的后台工作。这是扇动。假设您有一个包含1000个网站的列表,并且您想检查每个网站的响应时间,并发送任何需要超过5秒钟加载的网站的电子邮件。通过将这些作为并发任务运行,您可以比按顺序检查所有1000个站点更快地完成工作。

现在假设你不想为每个慢速网站发送电子邮件,你只想检查所有1000个网站并发送一封摘要电子邮件,说明有多少花了超过5秒,有多少花了更少。这是粉丝。任务队列比较棘手,因为你需要知道所有任务何时完成,你需要收集和总结他们的结果。

输入Pipeline API。 Pipeline API抽象了任务队列,使扇入更容易。您编写的内容看起来像同步,过程代码,但使用Python期货并且并行执行(尽可能多)。 Pipeline API跟踪任务依赖性并收集结果以便于构建分布式工作流。

MapReduce API包装Pipeline API以促进特定类型的分布式工作流:将一件作品的结果映射到一组键/值对,并通过组合它们的值将多组结果减少为一。 / p>

因此,它们围绕分布式任务执行的通用系统提供了越来越多的抽象和便利。正确的解决方案取决于您要完成的任务。

答案 1 :(得分:-1)