- 一般场景处理
- [MongoDB Connector for Hadoop](#MongoDB Connector for Hadoop)
- 部署安装
- [Hive Usage](#Hive Usage)
- 如何选择BSON还是直连MongoDB?
最近在研究Mongo和Hadoop技术栈结合使用的场景,抽空整理一下.
文章内容比较适用于使用MongoDB作为后端业务数据库,使用hadoop平台作为数据平台的场景.
一般情况下当数据相关的业务越来越多的时候,我们都不会选择在mongo中进行一些数据分析的事情.
更好的选择是同步到数据仓库中统一处理供数据分析及数据挖掘,我们的之前选择的是用mongoexport工具从secondary节点导出数据.
后面再进行一系列的数据处理的工作. 整个的pipeline这样:
一般场景处理
[MongoDB secondary node]
–> [local filesystem] 使用mongoexport/js/MongoClient读取数据
–> [数据存储系统] 上传/数据集成
–> [数据仓库] 数据清洗
这样的情景下重复劳动会比较多,譬如从一个collection中各自抽取出不同的数据,
可能要写几个脚本,对于mongoexport来导出Array等也很麻烦。
下面以一段简单的sample,描述上上述的pipeline过程,sample数据如下
db.ldc_test.insert({
"id":"@Tony_老七"
,"fav_id":[3,33,333,3333,33333]
,"info":{
"github":"https://github.com/tonylee0329"
,"location":"SH/CN"
}
})
- 采用mongoexport导出的数据
mongoexport -k -h data_mongo:29017 -q "{}" -d test -c ldc_test --type csv -o /tmp/info -f id,fav_id,info.github,info.location
导出结果为:
╰─$ cat /tmp/info
id,fav_id,info.github,info.location
@Tony_老七,"[3.0,33.0,333.0,3333.0,33333.0]",https://github.com/tonylee0329,SH/CN
如果我们使用到了fav_id的信息的时候,在RDBMS中无法做很好的数组打开操作,这时我们可能需要写单独的脚本处理(python or js)
- js脚本导出mongo数据
var rs = db.ldc_test.find();
var fields = "id,fav_id,info_github,info_location";
rs.forEach(