【问题标题】:Is there any way for MapReduce jobs to create or drop a collection from a MongoDB secondaryMapReduce 作业有什么方法可以从 MongoDB 辅助创建或删除集合
【发布时间】:2013-08-28 23:32:57
【问题描述】:

我有一个 MapReduce 作业,我只想在辅助服务器上运行。 MapReduce 输出将创建一个临时集合来存储结果,我想从该集合中读取结果,然后删除该集合。

【问题讨论】:

    标签: mongodb mapreduce


    【解决方案1】:

    您不能在 MongoDB 辅助节点上运行输出到集合中的 MapReduce 作业。您只能在 MongoDB 主节点上直接插入/更新数据。

    但是,您可以使用 out 参数使 MapReduce 输出 returned inline,例如:

    out: { inline: 1 }
    

    请注意,内联输出仅限于 maximum document size(在 MongoDB 2.4 中为 16 MB)。

    【讨论】:

      【解决方案2】:

      answer above 是准确的。仅提及其他信息:

      • Map-Reduce(和聚合管道作业)必须是只读的(从数据库的角度来看)才能在辅助节点上运行。
      • 对于 MR,需要为 outline 设置 inline 参数。

      示例 (Source):

      RS-replica-0:PRIMARY> db.txns.findOne()
      {
          "_id" : ObjectId("584a3b71cdc1cb061957289b"),
          "custid" : "cust_66",
          "txnval" : 100,
          "items" : [{"sku": sku1", "qty": 1, "pr": 100}, ...],
      ...
      }
      RS-replica-0:PRIMARY> var mapFunc = function() { emit(this.custid, this.txnval); }
      RS-replica-0:PRIMARY> var reduceFunc = function(key, values) { return Array.sum(values); }
      RS-replica-0:PRIMARY> db.txns.mapReduce(mapFunc, reduceFunc, {out: { inline: 1 }})
      {
          "results" : [
              {
                  "_id" : "cust_0",
                  "value" : 72734
              },
              {
                  "_id" : "cust_1",
                  "value" : 67737
              },
      ...
          ]
          "timeMillis" : 215,
          "counts" : {
              "input" : 10000,
              "emit" : 10000,
              "reduce" : 909,
              "output" : 101
          },
          "ok" : 1
      
      }
      
      • 即使遵循所有规则 (Source),在分片集群的情况下,MapReduce 作业也不会在辅助节点上运行。这是known bug,请投票,以便 MongoDB 人员在这些天修复它。 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-06
        • 2011-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多