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集群權限。

問題:增加一台服務器資源,卻只是為了安全的考慮,成本-效益不高。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM