MongoDB与Hadoop技术栈的整合应用

最近在研究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(
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值