2012-06-12 15 views
12

Ho un grande database Mongo (100 GB) ospitato nel cloud (MongoLab o MongoHQ). Vorrei eseguire alcune attività di Map/Reduce sui dati per calcolare alcune statistiche costose e mi chiedevo quale sia il miglior flusso di lavoro per ottenere questo risultato. Idealmente mi piacerebbe usare i servizi Map/Reduce di Amazon per fare questo invece di mantenere il mio cluster Hadoop.Qual è il modo migliore per eseguire Map/Reduce su dati da Mongo?

Ha senso copiare i dati dal database a S3. Quindi esegui Amazon Map/Reduce su di esso? O ci sono modi migliori per farlo.

Anche se più avanti sulla linea potrei voler eseguire le query frequentemente come ogni giorno, quindi i dati su S3 dovrebbero rispecchiare ciò che è in Mongo questo complicherebbe le cose?

Qualsiasi suggerimento/racconto di guerra sarebbe di grande aiuto.

risposta

9

Amazon S3 fornisce un'utilità chiamata S3DistCp per ottenere dati dentro e fuori S3. Questo è comunemente usato quando si esegue il prodotto EMR di Amazon e non si desidera ospitare il proprio cluster o utilizzare istanze per memorizzare i dati. S3 può memorizzare tutti i tuoi dati e EMR può leggere/scrivere dati da/a S3.

Tuttavia, il trasferimento di 100 GB richiederà del tempo e se si prevede di farlo più di una volta (ovvero più di un lavoro batch singolo), si verificherà un collo di bottiglia significativo nell'elaborazione (soprattutto se si prevede che i dati crescere).

Sembra che non sia necessario utilizzare S3. Mongo ha implementato un adattatore per implementare la mappa per ridurre i lavori su MongoDB. http://blog.mongodb.org/post/24610529795/hadoop-streaming-support-for-mongodb

Questo sembra attraente perché consente di implementare il MR in python/js/ruby.

Penso che questa configurazione mongo-hadoop sarebbe più efficiente di copiare 100 GB di dati verso S3.

AGGIORNAMENTO: un esempio di utilizzo della mappa di riduzione con mongo here.

Problemi correlati