【问题标题】:State of Map-Reduce on Appengine?Appengine 上的 Map-Reduce 状态?
【发布时间】:2011-12-07 07:30:13
【问题描述】:

appengine-mapreduce 似乎是在 AppEngine 上做事的官方方式。但是除了一些被破解的 Wiki 页面和冗长的视频之外,似乎没有任何文档。有声明说 lib 只支持map 步骤。但是消息来源表明shuffle也有实现。

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

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

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

【问题讨论】:

  • 这里为什么会有一个离题的关闭投票?关于 appengine map-reduce 库的问题在这里似乎非常热门。

标签: google-app-engine mapreduce


【解决方案1】:

从我的项目中调用哪个库。

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

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

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

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

MapReduce API 封装了 Pipeline API 以促进特定类型的分布式工作流:将一项工作的结果映射到一组键/值对,并通过组合它们的值将多组结果简化为一个。

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

【讨论】:

  • 这很有趣。到目前为止,我有一种模糊的感觉,管道应该是 MapReduce 的超集。 “减少多组结果” - 您是指 appengine-mapreduce 中的计数器功能还是另一种更复杂的减少方式?
  • 这更像是对“reduce”模式的一般描述。在实践中,您将编写自己的 reduce 函数并将其插入作业参数中。有关示例,请参阅 here。
【解决方案2】:

【讨论】:

  • 这是一个内部 Google 链接。
猜你喜欢
  • 1970-01-01
  • 2014-12-22
  • 2012-06-17
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多