MapReduce是Google在2004年推出的一种软件框架,用于支持对计算机集群中的大数据集进行分布式计算。 您可以从此处阅读有关MapReduce的信息 。

MongoDB是用C ++编写的面向开源文档的NoSQL数据库系统。 您可以从此处阅读有关MongoDB的更多信息。

1.安装MangoDB。

请遵循此处提供的MongoDB官方文档中的说明。 就我而言,我遵循了OS X的说明,并且工作正常,没有任何问题。
我使用sudo port install mongodb来安装MongoDB,我遇到的一个问题是关于我拥有的xcode版本。 基本上,我在OS X Leopard时安装了xcode,并且在移至Lion之后没有将xcode更新为最新版本。 一旦更新了xcode,就可以在MacPort上安装mongodb了。 另一个提示-有时直接从App Store安装xcode时无法正常工作-可以做的是,从App Store获取xcode,然后转到启动板,找到Install Xcode并从那里安装。

2.运行MongoDB

启动MongoDB很简单。
只需在终端或命令控制台中输入mogod即可
默认情况下,它将在27017上启动MongoDB服务器,并将使用/ data / db /目录存储数据–是的,即您在步骤– 1中创建的目录。
如果要更改这些默认设置,可以在启动服务器时进行更改。
mongod –port [your_port] –dbpath [your_db_file_path]
首次启动服务器时,需要确保your_db_file_path存在并且为空…

3.启动MongoDB shell

我们可以启动MongoDB shell –将其连接到我们的MongoDB服务器并从那里运行命令。
要启动MongoDB Shell以使用默认端口连接到在同一台计算机上运行的MongoDB服务器,您只需在命令行中键入mongo 。 如果您在具有不同端口的另一台机器上运行MongoDB服务器,请使用以下命令。

mongo [ip_address]:[端口]
例如:mongo localhost:4000

4.首先创建一个数据库。

在MangoDB Shell中输入以下内容…

> use library

上面应该创建一个名为“ library”的数据库。

现在查看是否已创建数据库,只需键入以下内容-应该列出所有数据库。

> show dbs;
您会注意到,您刚才创建的数据库未在此处列出。 原因是,MongoDB按需创建数据库。 只有当我们添加一些东西时,它才会被创建。

5.将数据插入MongoDB。

首先,使用以下命令创建两本书。

> book1 = {name : "Understanding JAVA", pages : 100}
> book2 = {name : "Understanding JSON", pages : 200}

现在,让我们将这两本书插入到名为books的集合中。

> db.books.save(book1)
> db.books.save(book2)

上面的两个语句将在数据库库下创建一个称为books的集合。 以下语句将列出我们刚刚保存的两本书。

> db.books.find();{ "_id" : ObjectId("4f365b1ed6d9d6de7c7ae4b1"), "name" : "Understanding JAVA", "pages" : 100 }
{ "_id" : ObjectId("4f365b28d6d9d6de7c7ae4b2"), "name" : "Understanding JSON", "pages" : 200 }

让我们再添加一些记录。

> book = {name : "Understanding XML", pages : 300}
> db.books.save(book)
> book = {name : "Understanding Web Services", pages : 400}
> db.books.save(book)
> book = {name : "Understanding Axis2", pages : 150}
> db.books.save(book)

6.编写地图功能

让我们以某种方式处理该图书馆藏书,我们需要找到页数少于250页且大于250页的书籍数量。

> var map = function() {
var category;
if ( this.pages >= 250 )
category = 'Big Books';
else
category = "Small Books";
emit(category, {name: this.name});
};

在此,由Map函数生成的集合将具有以下成员的集合。

{"Big Books",[{name: "Understanding XML"}, {name : "Understanding Web Services"}]);
{"Small Books",[{name: "Understanding JAVA"}, {name : "Understanding JSON"},{name: "Understanding Axis2"}]);

7.编写减少功能。

> var reduce = function(key, values) {
var sum = 0;
values.forEach(function(doc) {
sum += 1;
});
return {books: sum};
};

8.针对books集合运行MapReduce。

> var count  = db.books.mapReduce(map, reduce, {out: "book_results"});
> db[count.result].find(){ "_id" : "Big Books", "value" : { "books" : 2 } }
{ "_id" : "Small Books", "value" : { "books" : 3 } }

上面说,我们有2本大书和3本小书。

上面使用MongoDB Shell完成的所有操作,也可以使用Java完成。 以下是它的Java客户端。 您可以从此处下载所需的从属jar。

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MapReduceCommand;
import com.mongodb.MapReduceOutput;
import com.mongodb.Mongo;public class MongoClient {/*** @param args*/public static void main(String[] args) {Mongo mongo;try {mongo = new Mongo("localhost", 27017);DB db = mongo.getDB("library");DBCollection books = db.getCollection("books");BasicDBObject book = new BasicDBObject();book.put("name", "Understanding JAVA");book.put("pages", 100);books.insert(book);book = new BasicDBObject();  book.put("name", "Understanding JSON");book.put("pages", 200);books.insert(book);book = new BasicDBObject();book.put("name", "Understanding XML");book.put("pages", 300);books.insert(book);book = new BasicDBObject();book.put("name", "Understanding Web Services");book.put("pages", 400);books.insert(book);book = new BasicDBObject();book.put("name", "Understanding Axis2");book.put("pages", 150);books.insert(book);String map = "function() { "+ "var category; " +  "if ( this.pages >= 250 ) "+  "category = 'Big Books'; " +"else " +"category = 'Small Books'; "+  "emit(category, {name: this.name});}";String reduce = "function(key, values) { " +"var sum = 0; " +"values.forEach(function(doc) { " +"sum += 1; "+"}); " +"return {books: sum};} ";MapReduceCommand cmd = new MapReduceCommand(books, map, reduce,null, MapReduceCommand.OutputType.INLINE, null);MapReduceOutput out = books.mapReduce(cmd);for (DBObject o : out.results()) {System.out.println(o.toString());}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

参考: Facile Login博客上的JCG合作伙伴 Prabath Siriwardena的MongoDB与MapReduce 。

翻译自: https://www.javacodegeeks.com/2012/06/mapreduce-with-mongodb.html

使用MongoDB的MapReduce相关推荐

  1. MongoDB中mapReduce的使用

    MongoDB中mapReduce的使用 制作人:全心全意 mapReduce的功能和group by的功能类似,但比group by处理的数据量更大 使用示例: var map = function ...

  2. MongoDB中MapReduce介绍与使用

    本文来说下MongoDB中MapReduce介绍与使用 文章目录 概述 概述

  3. 一篇文章带你搞定 MongoDB 中 MapReduce 使用

    玩过 Hadoop 的小伙伴对 MapReduce 应该不陌生,MapReduce 的强大且灵活,它可以将一个大问题分解为多个小问题,将各个小问题发送到不同的机器上去处理,所有的机器都完成计算后,再将 ...

  4. MongoDB:MapReduce的使用

    文章目录 MongoDB:MapReduce的使用 一.简介 二.MapReduce命令 基本语法 案例 三.runCommand 命令 语法 案例 MongoDB:MapReduce的使用 一.简介 ...

  5. 用MongoDB实现MapReduce

    来源:http://blog.csdn.net/star_zongke/article/details/7475455 MapReduce 是 Google 在 2004 年发布的一个软件框架,用于支 ...

  6. 在MongoDB的MapReduce上踩过的坑

    太久没动这里,目前人生处于一个新的开始.这次博客的内容很久前就想更新上来,但是一直没找到合适的时间点(哈哈,其实就是懒),主要内容集中在使用Mongodb时的一些隐蔽的MapReduce问题: 1.R ...

  7. mongodb mapreduce用法

    mongoDB的MapReduce简介         分类:            MongoDB2012-12-06 21:378676人阅读评论(2)收藏举报 MongoDB MapReduce ...

  8. 快速掌握mongoDB(二)——聚合管道和MapReduce

    上一节简单介绍了一下mongoDB的增删改查操作,这一节将介绍其聚合操作.我们在使用mysql.sqlserver时经常会用到一些聚合函数,如sum/avg/max/min/count等,mongoD ...

  9. MongoDB(3)--有关NoSQL及MongoDB的一些概念

    学习任何东西在没有理解的前提下去背熟一些概念是没有用的,就像只背会了几个概念而没有理解的开发人员去面试是经不住面试官的追问的.前面的两篇对MongoDB做了简单的介绍,能够很快上手,对MongoDB有 ...

最新文章

  1. jquery 地理位置 与 IP地址
  2. 第一个Swift程序Hello World
  3. try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后?...
  4. Gradle接口:Gradle构建元数据
  5. php 实现贪吃蛇游戏,C++实现简单贪吃蛇游戏
  6. idea项目application.properties文件注释显示unicode编码
  7. jquery的ajax查询数据库,jquery中使用ajax获取远程页面信息
  8. 温故而知新:查看端口占用情况以及DOS中的管道操作/重定向操作
  9. 第二章 字符串处理与编码不再发愁
  10. python_07 函数作用域、匿名函数
  11. NYOJ 90整数划分
  12. lua 令牌桶 源码_Redis和Lua脚本(实现令牌桶限流)
  13. BlackBerry9700刷机
  14. gateway 动态路由
  15. python基础-古诗词填词游戏
  16. linux批量解压压缩包
  17. swiper ie11版本兼容调整
  18. 哪款护眼灯最适合学生?教育部入围护眼照明品牌
  19. 数据结构 严薇敏 队列 的实现及其使用方法详解
  20. 二叉树的基本操作——数据结构实验报告

热门文章

  1. 为什么jdk的CLASSPATH环境变量需要设置rt.jar 和 tools.jar
  2. Get和Post请求和对应的参数获取
  3. recorder_将Java Flight Recorder与OpenJDK 11一起使用
  4. kata_小规模流处理kata。 第1部分:线程池
  5. java对话_您应该保持联系的十大高级Java对话
  6. cloud foundry_将Spring Boot应用程序绑定到Cloud Foundry中的服务的方法
  7. stackoverflow_Stackoverflow的见解:投票最多的是Spring 4问题
  8. Hibernate锁定模式– OPTIMISTIC_FORCE_INCREMENT锁定模式如何工作
  9. jetty嵌入式容器_嵌入式Jetty和Apache CXF:借助Spring Security来保护REST服务
  10. 为什么在生产中进行硒自动化测试对于您的下一个版本至关重要?