使用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.pswp.cn/news/372230.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372230.shtml
英文地址,請注明出處:http://en.pswp.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布局的一…