MongoDB:Map-Reduce

Map-reduce是一个考虑大型数据得到有用聚集结果的数据处理程式(paradigm).针对map-reduce操作,MongoDB提供来mapreduce命令.

考虑下面的map-reduce操作:

在这个map-reduce操作里,MongoDB为每个输入的文档(比如,集合中满足了查询条件的文档)应用了map操作.Map函数输入键值对.对拥有多个值的那些键,MongoDB采用reduce阶段,即收集和压缩聚集的数据.Mongo-DB然后把结果存在一个集合里面.Reduce函数的输出可以选择传递给一个finalize函数去进一步压缩或处理聚集结果.

在MongoDB中,所有的map-reduce函数都是javascript代码,都运行在mongod进程.Map-reduce操作接受一个集合的文档作为输入,并可以在map阶段之前执行任意排序和限制.mapreduce可以以一个文档的形式返回map-reduce操作的结果,或者可能往集合写入结果。输入和输出的集合可能是共享的。

注:

对大多数的聚集操作,聚集管道提供了更好的性能和更一致的接口。然而,map-reduce操作提供了在聚集管道所没有的灵活性。

Map-Reduce JavaScript 函数

在MongoDB,map-reduce操作使用自定义的函数去map,或者进行键和值的关联。如果一个键有多个值和它对应,则reduce操作将该键的值“减”到单一的对象(the operation reduces the values for the key to a single object)。

自定义的javascript函数给map-reduce带来了灵活性。举个例子,当处理一个文档,map函数产生多于一个的键值对匹配或者没有键值对匹配。Map-reduce函数也可以使用一个自定义的javascript函数在map和reduce函数操作结束时对结果进行最终的修改。

Map-Reduce 行为

在MongoDB,map-reduce函数能够联机往集合写入结果或返回结果。如果你将map-reduce的输出写入一个集合,你可以在相同的输入集合上执行随后的map-reduce操作,并会合并替代、合并,或者削减之前的结果。

当联机返回map-reduce操作的结果,结果文档必须在BSON Document Size限制内,目前是16M。

MongoDB支持在共享集合上的map-reduce操作,也能向共享集合输出结果。

MongoDB:Map-Reduce

时间: 2024-08-09 11:40:19

MongoDB:Map-Reduce的相关文章

mongoDB的map reduce

mongoDB的map reduce使用 示例: res = db.runCommand({ mapreduce:'liveEpgUserVisits', map:function() { emit({provice:this.provice}, {"data":[{"mac":this.mac}],visit:this.visitNum, userCount:0}); }, reduce:function(key, value) { var ret = {data

Hadoop学习:Map/Reduce初探与小Demo实现

一.    概念知识介绍 Hadoop MapReduce是一个用于处理海量数据的分布式计算框架.这个框架攻克了诸如数据分布式存储.作业调度.容错.机器间通信等复杂问题,能够使没有并行 处理或者分布式计算经验的project师,也能非常轻松地写出结构简单的.应用于成百上千台机器处理大规模数据的并行分布式程序. Hadoop MapReduce基于"分而治之"的思想,将计算任务抽象成map和reduce两个计算过程,能够简单理解为"分散运算-归并结果"的过程.一个 M

第九篇:Map/Reduce 工作机制分析 - 数据的流向分析

前言 在MapReduce程序中,待处理的数据最开始是放在HDFS上的,这点无异议. 接下来,数据被会被送往一个个Map节点中去,这也无异议. 下面问题来了:数据在被Map节点处理完后,再何去何从呢? 这就是本文探讨的话题. Shuffle 在Map进行完计算后,将会让数据经过一个名为Shuffle的过程交给Reduce节点: 然后Reduce节点在收到了数据并完成了自己的计算后,会将结果输出到Hdfs. 那么,什么是Shuffle阶段,它具体做什么事情? 需要知道,这可是Hadoop最为核心的

第九篇:Map/Reduce 工作机制分析 - 作业的执行流程

前言 从运行我们的 Map/Reduce 程序,到结果的提交,Hadoop 平台其实做了很多事情. 那么 Hadoop 平台到底做了什么事情,让 Map/Reduce 程序可以如此 "轻易" 地实现分布式运行? Map/Reduce 任务执行总流程 经过之前的学习,我们已经知道一个 Map/Reduce 作业的总流程为: 代码编写  -->  作业配置  -->  作业提交  -->  Map任务的分配和执行  -->  处理中间结果(Shuffle)  --&

高阶函数:map()/reduce()

Python内建了map()和reduce()函数. 如果你读过Google的那篇大名鼎鼎的论文"MapReduce: Simplified Data Processing on Large Clusters",你就能大概明白map/reduce的概念. 我们先看map.map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回. 举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个li

Python学习十三:map/reduce

map()和reduce()是Python内建的两个高阶函数.怎么理解他们呢? 用法: 1.map():map函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. 2.reduce():reduce把一个函数作用在一个序列[x1, x2, x3-]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是: reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x

第十一篇:Map/Reduce 工作机制分析 - 错误处理机制

前言 对于Hadoop集群来说,节点损坏是非常常见的现象. 而Hadoop一个很大的特点就是某个节点的损坏,不会影响到整个分布式任务的运行. 下面就来分析Hadoop平台是如何做到的. 硬件故障 硬件故障可以分为两种 - JobTracker节点损坏和TaskTracker节点损坏. 1. JobTracker节点损坏 这是Hadoop集群中最为严重的错误. 出现了这种错误,那就只能重新选择JobTracker节点,而在选择期,所有的任务都必须停掉,而且当前已经完成了的任务也必须通通重来. 2.

python系统学习:第四周之Map/Reduce/Sored高级函数

# 高阶函数:map/reduce/filter/sort# map()函数接收两个参数:函数名.iterable# 例如计算[1,2,3,4,5] 的平方根# 老办法:lists = []def new(x): for i in x: lists.append(i * i) return (lists) print(new([1, 2, 3, 4, 5]))# map()方法def new2(x): return x*x print(list(map(new2,[1,2,3,4,5]))) #

Python基础篇【第2篇】: Python内置函数--map/reduce/filter/sorted

Python内置函数 lambda lambda表达式相当于函数体为单个return语句的普通函数的匿名函数.请注意,lambda语法并没有使用return关键字.开发者可以在任何可以使用函数引用的位置使用lambda表达式.在开发者想要使用一个简单函数作为参数或者返回值时,使用lambda表达式是很方便的.总结:处理简单逻辑,自动返回结果 语法格式: lambda parameters: expression 就相当于 def fun(args) return expression 并且lam

记一次MongoDB Map&Reduce入门操作

需求说明 用Map&Reduce计算几个班级中,每个班级10岁和20岁之间学生的数量: 需求分析 学生表的字段: db.students.insert({classid:1, age:14, name:'Tom'}) 将classid随机1和2.age在8-25岁之间随机,name在3-7个字符之间随机. 数据写入 数据写入java脚本 往mrtask库中students写入1000万条数据: package org.test; import java.util.ArrayList; impor