使用MongoDB的MapReduce

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java epson指令集_EPSON机械手 SPEL+语言指令集

下面是全部指令的简明列表,放在这里方便参考。之后重要的指令,勇哥要拿出来单独学习。系统管理相关命令Reset 将控制器重置为初始状态。SysConfig 显示系统设置参数。SysErr 返回最新的错误状态或警告状态。Date 显示日期。Time 显示时间。Date$ 以字符串…

1、关于action中解决跨域请求问题:

(1)、action中使用ajax传值时HttpServletRequest request ServletActionContext.getRequest(); String origin request.getHeader("Origin"); HttpServletResponse response ServletActionContext.getResponse(); response.setContentType(…

dom contains 包含关系

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>contains</title></head><body> <div id"p-node"> <div id"c-node">子节点内容&…

ANTLR:入门

这篇文章使您了解ANTLR的基础知识。 以前&#xff0c;我们已经了解了如何将ANTLR设置为外部工具。 在这里&#xff1a; ANTLR外部工具 :) 所以&#xff0c;我们开始…。 什么是ANTLR&#xff1f; •另一个语言识别工具&#xff0c;是一种语言工具&#xff0c;它提供了一个框架…

安装JAVA8要登录_JDK8的安装及环境配置

原文链接:https://www.cnblogs.com/chenxj/p/10137221.html1、下载JDK&#xff1b;b、或百度网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1S14y4_3eN9G6oOVfhmbe_w提取码&#xff1a;0cf62、双击安装程序&#xff0c;点击下一步安装目录若不修改&#xff0c;可直…

【学习笔记】JavaScript基础(一)

【学习过程遇到疑问和延伸阅读】 1.document.write()的深入理解write()方法可向文档写入HTML表达式或JavaScript代码。可使用document.write()向输出流写文本或者HTML 延伸阅读《js中document.write的那点事》http://www.cnblogs.com/dh616854836/articles/2140349.html 2.编程…

js操纵cookie技术

<% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>图片浏览</title> <script typ…

java none怎么用tomcat_使用tomcat做java中间件

tomcat是一个老牌的中间件了&#xff0c;从我从业到现在时不时都会遇到它&#xff0c;方便、灵活、性能一般是我对它的使用经验总结。配置注意 &#xff1a; tomcat 7 和 6 有很大差别&#xff0c;server.xml catalina.sh 配置文件不能通用设置tomcat7 使用jdk1.7export JAVA_H…

早期访问中带有NetBeans的Oracle公共云Java服务

谁期望发生这种情况&#xff1a;Oracle正在开发公共云产品&#xff0c;并且即将开始正式启动的迹象已经出现。 在正式宣布之后将近一年&#xff0c;我被邀请加入所谓的“抢先体验”计划&#xff0c;以试驾新服务并提供反馈。 多亏负责产品的经理Reza Shafii &#xff0c;我才可…

MySQL 分组之后如何统计记录条数 gourp by 之后的 count()

SELECT count(*) FROM 表名 WHERE 条件 // 这样查出来的是总记录条SELECT count(*) FROM 表名 WHERE 条件 GROUP BY id //这样统计的会是每组的记录条数.如何获得 第二个sql语句的总记录条数? 则是&#xff0c;如下&#xff1a;    select count(*) from(SELECT count(*) F…

python CS游戏1--角色创建,武器购买

#codingutf-8 import random 本文字主要目的是随机创建一个角色&#xff0c;并且武器是随机产生的&#xff0c;自带系统给的费用10000,10000元钱可以购买武器&#xff0c;购买武器以后&#xff0c;钱会减少&#xff0c;直到不足提示无法购买 dir{"AK47":2000,"…

App Engine中的Google Services身份验证,第2部分

在本教程的第一部分中&#xff0c; 我描述了如何使用OAuth进行Google API服务的访问/身份验证。 不幸的是&#xff0c;正如我稍后发现的那样&#xff0c;我使用的方法是OAuth 1.0&#xff0c;显然现在Google正式弃用了OAuth 1.0&#xff0c;改用OAuth 2.0版本。 显然&#xff0…

字符串常用操作

1 常用&#xff1a;分割、长度、索引、切片2 r (1,2,3,4,5)#只读列表元组3 name "liangml"4 strip5 username input("user:")6 if username.strip() "liangml":#strip可以将输入前后的空格都换掉7 print("welcome")8 9 split …

java 保存bufferedimage_java - 如何将BufferedImage保存为Fi

答案在于Java Documentation的编写/保存图像教程。SaveImage.java类提供以下保存图像的方法&#xff1a;static boolean ImageIO.write(RenderedImage im, String formatName, File output) throws IOException该教程解释了这一点BufferedImage类实现RenderedImage接口。所以它…

MarkDownPad2 注册码

注册信息 邮箱地址&#xff1a; Soar360live.com 授权秘钥&#xff1a;GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2M5SN6bnxn2kSE8qHqNY5QaaRxmO3YSMHxlv2EYpjdwLcPwfeTG7kUdnhKE0vVy4RidP6Y2wZ0q74f47fzsZo45JE2hfQBFi2O9Jldjp1mW8HUpTtLA2a5/sQytX…

[51nod1297]管理二叉树

一个初始为空的二叉搜索树T&#xff0c;以及1到N的一个排列P: {a1, a2, ..., aN}。我们向这个二叉搜索树T添加这些数&#xff0c;从a1开始, 接下来是 a2, ...&#xff0c; 以aN结束。在每一个添加操作后&#xff0c;输出T上每对节点之间的距离之和。例如&#xff1a;4 7 3 1 8 …

Java Swing中的聊天气泡

本文将向您解释“如何在Java swing应用程序中绘制聊天气泡&#xff1f;” 聊天气泡与呼出气泡或思想气泡相同。 今天&#xff0c;大多数聊天应用程序都以这种格式显示转换&#xff0c;因此本文将帮助您在用Java swing创建的桌面应用程序中进行相同的操作。 以下课程用于绘制第一…

java内存模型按照线程隔离性_深入理解Java多线程与并发框(第③篇)——Java内存模型与原子性、可见性、有序性...

一、Java内存模型Java Memory Modle&#xff0c;简称 JMM&#xff0c;中文名称 Java内存模型&#xff0c;它是一个抽象的概念&#xff0c;用来描述或者规范访问内存变量的方式。因为各中计算机的操作系统和硬件不同&#xff0c;方式机制也可能不同&#xff0c;Java内存模型用于…

PHP通过PDO连接Microsoft Access数据库

1连接到access数据库 $db new PDO("odbc:Driver{Microsoft Access Driver (*.mdb, *.accdb)}; dbq" .realpath("yourfilepath\# ddsbbn3A02.Mdb")) or die("Connect Error"); realpath函数用来规范化绝对路径 2修改数据库中BM_sitelink表中字段…

ZK实际应用:样式和布局

在之前的ZK in Action帖子中&#xff0c;我们使用ZK MVVM实现了CRUD功能 。 我们还快速浏览了一些样式代码&#xff0c;可能需要更多的解释。 在本文中&#xff0c;我们将讨论如何在ZK小部件上附加新CSS样式规则&#xff0c;以及如何覆盖现有样式。 我们还将介绍ZK中UI布局的一…