首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使数据存储密钥mapreduce友好(-er)?

如何使数据存储密钥mapreduce友好(-er)?
EN

Stack Overflow用户
提问于 2013-03-06 16:20:39
回答 1查看 279关注 0票数 5

编辑:请看我的答案。问题就在我们的代码里。MR工作正常,它可能存在状态报告问题,但至少输入读取器工作正常。

现在我做了几次实验,现在我确信mapreduce (或DatastoreInputReader)有着奇怪的行为。我怀疑这可能与密钥范围和分割它们有关,但这只是我的猜测。

总之,下面是我们的设置:

  1. 在创建该模型的新实体时,我们有一个名为"AdGroup“的NDB模型--我们使用从AdWords返回的相同id (它是一个整数),但是我们使用它作为字符串:AdGroup(id=str(adgroupId))
  2. 我们的数据存储中有1,163,871个实体(这就是"Datastore Admin“页面告诉我们的--我知道这不是完全准确的数字,但我们并不经常创建/删除广告组,因此我们可以肯定地说,这个数字是110万或更多)。
  3. mapreduce (从另一个管道启动)如下所示: input_reader_spec='mapreduce.input_readers.DatastoreInputReader',_ mapreduce_pipeline.MapreducePipeline( job_name=‘AdGroup’,mapper_spec='process.adgroup_mapper',reducer_spec='process.adgroup_reducer',mapper_params={‘entity_mapper_params=’:‘yield .AdGroup’,'shard_count':120,'processing_rate':500,'batch_size':20,} )

因此,我今天已经尝试运行了几次mapreduce,而没有更改代码中的任何内容,也没有对数据存储进行任何更改。每次我运行它,地图呼叫柜台有一个不同的价值从45万到55万。

如果我错了,请纠正我,但是考虑到我使用的是非常基本的DatastoreInputReader -mapper-调用应该等于实体的数量。所以应该是110万甚至更多。

注意:我之所以一开始就注意到这个问题,是因为我们的营销人员开始抱怨说:“在我们添加了新的广告群4天后,他们仍然没有出现在你的应用程序中!”

现在,我只能想到一个解决办法--将所有广告组的所有键写入blobstore文件(每行一个),然后使用BlobstoreLineInputReader。当然,对blob部分的编写必须以不使用DatastoreInputReader的方式编写。我现在应该这样做,或者你能提出更好的建议吗?

注意:我也尝试用相同的代码使用DatastoreKeyInputReader --结果相似--映射器--调用在45万到55万之间。

所以终于有问题了。如何为实体生成Is很重要吗?使用int ids比使用str ids更好吗?一般来说,我能做些什么来使mapreduce更容易地找到映射它们的所有实体?

PS:我还在试验这个过程,我以后可能会添加更多的细节。

EN

回答 1

Stack Overflow用户

发布于 2013-03-26 08:00:44

经过进一步的研究,我们发现错误实际上在我们的代码中。因此,mapreduce实际上按预期工作(为每个数据存储实体调用mapper)。

我们的代码调用了一些谷歌服务功能,这些功能有时会失败(奇妙的神秘的ApplicationError消息)。由于这些失败,任务先生被重新审判。但是,我们已经对任务队列重试设置了一个限制。先生没有发现也没有以任何方式报告这一点--先生仍然在所有碎片的状态页面上显示出“成功”。这就是为什么我们认为我们的代码一切都很好,并且输入读取器有问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15252616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档