使用MongoDB的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的全部內容,希望文章能夠幫你解決所遇到的問題。