3

我已经开始使用新的 Google App Engine Pipeline API 创建 MapReduce 作业,并且遇到了一种情况,我希望每个工作人员在运行时都拥有相同列表的副本。

一种选择是使用 memcache,但我担心这个列表的大小最终可能会大于我可以使用 memcache 设置的大小。我认为我的另一个选择是在运行时使用此列表上下文初始化每个工作人员,但我在文档中找不到任何方法来执行此操作,并且查看源代码并没有提供任何明显的答案。

有没有办法将额外的参数添加到 map reduce 函数中或以其他方式将状态注入 MapReduce 工作上下文?

4

1 回答 1

2

目前没有官方的方法。您可能可以在 MapReduce 管道中添加一个任务来计算和缓存列表(在数据存储或 Blob 存储中,以最合适的为准,加上内存缓存中的副本)。然后让你的 mapper 和/或 reducer 函数对保存列表的全局变量进行延迟初始化,首先检查 memcache,并在必要时回退到 datastore/blobstore(并重新缓存列表)。随着新实例的启动以处理任务,它们将自行初始化。

假设列表在 MapReduce 启动时是固定的,来自不同实例的竞争读取不会成为问题。

于 2012-06-09T02:36:57.013 回答