MongoDB本身可以做一些简单的统计工作,包括其内置的基于Javascript的MapReduce框架,也包括在MongoDB 2.2版本中引入的新的统计框架。除此之外,MongoDB 还提供了对外部统计工具的接口,这就是本文要说的MongoDB-Hadoop的数据中间件。文章内容来源于MongoDB官方博客。
原理图解
MongoDB与Hadoop相结合的方式如下图所未,MongoDB作为数据源存储以及数据结果存储。而具体的计算过程在Hadoop中进行。

这一套处理流程,允许我们通过 Python, Ruby 与 JavaScript 来写MapReduce函数进行数据统计,而不是使用Java。
例子
首先准备好Hadoop环境,并安装好Hadoop,MongoDB中间件。然后通过下面的方式进行数据处理。
1.数据准备
从Twitter API导入原始数据到MongoDB中
curl https://stream.twitter.com/1/statuses/sample.json -u: | mongoimport -d twitter -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/twitter.in -outputURI mongodb://127.0.0.1/twitter.out |
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号

TechTarget
官方微博

TechTarget中国
作者
翻译
相关推荐
-
Azure数据湖分析从U-SQL中获得提升
大数据的发展已经让许多精通SQL的数据专业人员不知所措。微软的U-SQL编程语言试图让这些人回归数据查询游戏。
-
2017年1月数据库流行度排行榜 新年新气象
新年新气象,数据库知识网站DB-engines最近更新了2017年1月份数据库流行度榜单。TechTarget数据库网站将与您分享1月份的榜单排名情况,让我们拭目以待。
-
2016年12月数据库流行度排行榜 几家欢乐几家愁
在过去的6个月中,数据库排行榜的前二十名总体上没有太大的变动,那么数据库知识网站DB-engines最近更新的2016年12月份数据库流行度排名情况是否一如既往的沉寂、低调呢?
-
2016年10月数据库流行度排行榜 两组数据库棋逢对手
数据库知识网站DB-engines更新了2016年10月份的数据库流行度排行榜,10月份的榜单又有哪些变化,哪些惊喜呢?