MongoDB集成Hadoop進行統計計算

jopen 11年前發布 | 54K 次閱讀 MongoDB Hadoop NoSQL數據庫

MongoDB 本身可以做一些簡單的統計工作,包括其內置的基于 Javascript 的 MapReduce 框架,也包括在MongoDB 2.2版本中引入的新的統計框架。除此之外,MongoDB 還提供了對外部統計工具的接口,這就是本文要說的MongoDB-Hadoop的數據中間件。文章內容來源于MongoDB官方博客。

原理圖解

MongoDB與Hadoop相結合的方式如下圖所未,MongoDB作為數據源存儲以及數據結果存儲。而具體的計算過程在Hadoop中進行。

2315342238-0.png

這一套處理流程,允許我們通過 Python, Ruby 與 JavaScript 來寫MapReduce函數進行數據統計,而不是使用Java。

例子

首先準備好Hadoop環境,并安裝好Hadoop,MongoDB中間件。然后通過下面的方式進行數據處理。

1.數據準備

從推ter API導入原始數據到MongoDB中

curl https://stream.推ter.com/1/statuses/sample.json -u: | mongoimport -d 推ter -c in

2.Map函數

寫一個map函數,保存在文件mapper.rb 中

#!/usr/bin/env ruby
require 'mongo-hadoop'

MongoHadoop.map do |document|
  { :_id => document['user']['time_zone'], :count => 1 }
end

3.Reduce函數

然后是reduce函數,保存在文件reducer.rb中

#!/usr/bin/env ruby
require 'mongo-hadoop'
MongoHadoop.reduce do |key, values|
  count = sum = 0
  values.each do |value|
    count += 1
    sum += value['num']
  end
  { :_id => key, :average => sum / count }
end

4.運行腳本

創建一個運行腳本,寫入下面內容,就可以利用上面的MapReduce方法處理第一步中獲取的數據。

hadoop jar mongo-hadoop-streaming-assembly*.jar -mapper mapper.rb -reducer reducer.rb 
-inputURI mongodb://127.0.0.1/推ter.in -outputURI mongodb://127.0.0.1/推ter.out
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!