2012-06-12 33 views
12

我有一個大的Mongo數據庫(100GB)託管在雲中(MongoLab或MongoHQ)。我想對數據運行一些Map/Reduce任務來計算一些昂貴的統計數據,並想知道完成這個任務的最佳工作流程。理想情況下,我想使用亞馬遜的Map/Reduce服務來完成此操作,而不是維護我自己的Hadoop羣集。在Mongo的數據上運行Map/Reduce的最佳方式是什麼?

將數據庫中的數據複製到S3是否合理?然後在其上運行Amazon Map/Reduce?或者有更好的方法來完成這件事。

此外,如果進一步下線,我可能想像每天那樣頻繁地運行查詢,所以S3上的數據需要反映Mongo中的內容,這會使事情變得複雜嗎?

任何建議/戰爭故事將是超級有用的。

回答

9

Amazon S3提供了一個名爲S3DistCp的實用程序來獲取數據進出S3。運行亞馬遜的EMR產品時通常會使用此功能,並且您不想承載自己的羣集或使用實例來存儲數據。 S3可以爲您存儲所有數據,EMR可以從/向S3讀取/寫入數據。

但是,傳輸100GB將需要時間,如果您計劃多次執行此操作(即超過一次性批處理作業),這將成爲處理過程中的重大瓶頸(特別是在預計數據增長)。

看起來你可能不需要使用S3。 Mongo已經實現了一個適配器來實現MongoDB之上的map reduce任務。 http://blog.mongodb.org/post/24610529795/hadoop-streaming-support-for-mongodb

這看起來很吸引人,因爲它可以讓你在python/js/ruby​​中實現MR。

我認爲這種mongo-hadoop設置比將100GB數據複製到S3更高效。

更新:使用map-reduce與mongo的示例here

相關問題