MongoDB集成Hadoop進行統計計算
MongoDB 本身可以做一些簡單的統計工作,包括其內置的基于 Javascript 的 MapReduce 框架,也包括在MongoDB 2.2版本中引入的新的統計框架。除此之外,MongoDB 還提供了對外部統計工具的接口,這就是本文要說的MongoDB-Hadoop的數據中間件。文章內容來源于MongoDB官方博客。
原理圖解
MongoDB與Hadoop相結合的方式如下圖所未,MongoDB作為數據源存儲以及數據結果存儲。而具體的計算過程在Hadoop中進行。
這一套處理流程,允許我們通過 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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!