【问题标题】:How to resovle rename exception in Pymongo map reduce如何解决 Pymongo mapreduce 中的重命名异常
【发布时间】:2015-05-11 01:43:22
【问题描述】:

我有一个 map reduce 作为 cronjob 在我的服务器上每小时运行一次。我遇到了一个错误,它阻止了 map reduce 完成。这通常发生在我在本地运行 map reduce 脚本时,它同时与服务器上的 map reduce 发生冲突。在某些情况下,当错误发生时,我在本地单独运行它作为服务器作业。错误是

errmsg: "exception: rename failed: { errmsg: "exception: target namespace exists", code: 10027, ok: 0.0 }", code: 10076, ok: 0.0 }

这个错误阻止我删除集合以及运行我的脚本来覆盖当前减少的集合。你知道如何防止这种情况发生或解决问题,以便我可以删除收藏

这是我用来运行 map reduce 的命令

articles.map_reduce(map, reduce, "articleTrending", query=queryFilter)

【问题讨论】:

  • 那么你的意思是什么?你在“测试”吗?如果是这样,那么使用不同的输出集合,或者更好的是在完全不同的机器上运行您的测试。根据您所说的,当您尝试运行它时,这项工作或其他东西正在处理该集合。所以要么安排你的两个不同的工作(不知道你会拥有它们)不发生冲突,或者只是不要在相同的目标上运行。
  • 工作冲突不是我得到错误的唯一情况
  • 那么根据您提供的信息,您希望人们如何处理它?显然,您正试图在其他人使用它的同时替换一个集合。所以这里的理由是不要在多个地方使用同一个命名空间。
  • 很好奇是否有人知道为什么会出现此错误。以及为什么 mongo 甚至不允许我放弃收藏。我不想在我引用此集合的每个文件中切换名称。你不觉得数据库的这种行为有点奇怪吗?我找到了另一个来源,他们遇到了同样的问题,但没有人有解决方案。

标签: python mongodb dictionary reduce


【解决方案1】:

不是将“articleTrending”作为“out”参数传递,而是您想要“替换”该集合。所以你可以这样做:

articles.map_reduce(map, reduce, {"replace": "articleTrending"}, query=queryFilter)

对于如何处理 mapReduce 输出有很多选择。 “out”的官方 MongoDB 文档are here。还有一些python examples here

【讨论】:

  • 我已将此措施作为一项额外的预防措施,同时通过对查询应用较小的限制来减轻我的地图上的负载。从那以后,我没有遇到过这个问题。如果有人知道为什么会发生上述行为,请分享
猜你喜欢
  • 2017-02-11
  • 1970-01-01
  • 2012-09-24
  • 2018-07-26
  • 2015-10-06
  • 2021-04-22
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
相关资源
最近更新 更多