zoukankan      html  css  js  c++  java
  • Hadoop+MongoDB的四种方案

    背景:

    公司核心业务库现存在MongoDB中,分布在6台MongoDB节点。现面临如下问题:

    1.最大的一张表有10多个G,MongoDB在查询方面尚能胜任,但是涉及到复杂计算时会比较吃力。

    2.MongoDB中有三张表,分别记录了最终用户在三个不同系统(电话,游戏,桌牌等)的行为,需要按用户汇聚成一张表。

    考虑到MongoDB集成Hadoop来获得计算能力,先要让hadoop能访问到MongoDB中数据,下面讨论各个方案:

    image

    一)一个不安全的方案--MongoDB-connector for hadoop

    支持通过Hive建表直接访问MongoDB中的数据:

    CREATE  TABLE default.caller_intent
    ( 
      id STRING
      merchantId INT,
      effective BOOLEAN,
     level STRING,
    status STRING,
    canceled BOOLEAN,
    levelId INT,
    sendMsg BOOLEAN
    )
    STORED BY 'com.mongodb.hadoop.hive.MongoStorageHandler'
    WITH SERDEPROPERTIES('mongo.columns.mapping'='{"id":"_id"}')
    TBLPROPERTIES('mongo.uri'='mongodb://root:changme@10.1.1.1:27017/caller.caller_intent');

    问题:

    1)mongo数据库需要暴露密码给hadoop平台,两个平台是不同团队维护。

    2)hadoop对mongo的操作是难以预料的,在不当时间内做不当操作可能会影响mongodb负载。

    如果你的团队没有这样的问题,可以考虑这个方案。

    二)一个好想法,但只是“想法”--MongoDB-oplog同步到hadoop

    通过oplog来同步数据是一个好想法,不过目前没有好的工具包支持同步到Hive(倒是有同步到solr和ElasticSearch的),自己开发成本太高,作罢。

    三)一个可行方案:写入MongoDB的同时写入到kafka,然后通过flume到HDFS。

    image

    问题:

    在这个方案施行以前的历史数据需要手动导入。

    四)另一个想法:另建一个备MongoDB集群同步主集群数据,hadoop平台拥有该备Mongo集群权限。

    问题:增加一台服务器资源,却只是为了安全的考虑,成本-效益不高。

    如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
    如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
    如果,您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是【Arli】。

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Linux下PHP升级的方法
    centos6 授权文件夹所有用户可用
    重置密码遇到ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor:yes)问题
    MySQL Daemon failed to start. 正在启动 mysqld:[失败]
    MySql取消密码强度验证功能
    twbsPagination.js分页插件
    同一个Tomcat部署多个springboot项目问题
    同一个tomcat部署多个项目导致启动失败
    启动Spring boot项目报错:java.lang.IllegalArgumentException: LoggerFactory is not a Logback
    Vue中关于vue-awesome-swiper插件使用以及要注意的 “坑”
  • 原文地址:https://www.cnblogs.com/arli/p/6141558.html
Copyright © 2011-2022 走看看