2012-06-12 17 views
12

Tengo una gran base de datos de Mongo (100 GB) alojada en la nube (MongoLab o MongoHQ). Me gustaría ejecutar algunas tareas de Map/Reduce en los datos para calcular algunas estadísticas costosas y me preguntaba cuál es el mejor flujo de trabajo para hacer esto. Idealmente, me gustaría utilizar los servicios Map/Reduce de Amazon para hacerlo en lugar de mantener mi propio clúster Hadoop.¿Cuál es la mejor manera de ejecutar Map/Reduce cosas en Mongo?

¿Tiene sentido copiar los datos de la base de datos a S3. Entonces ejecuta Amazon Map/Reduce on it? ¿O hay mejores formas de hacerlo?

Además, si más adelante quisiera hacer las consultas con frecuencia como todos los días, entonces los datos en S3 deberían reflejar lo que hay en Mongo. ¿Esto complicaría las cosas?

Cualquier sugerencia/historia de guerra sería muy útil.

Respuesta

9

Amazon S3 proporciona una utilidad llamada S3DistCp para obtener datos dentro y fuera de S3. Esto se usa comúnmente al ejecutar el producto EMR de Amazon y no desea alojar su propio clúster ni agotar instancias para almacenar datos. S3 puede almacenar todos sus datos por usted y EMR puede leer/escribir datos de/a S3.

Sin embargo, la transferencia de 100GB llevará tiempo y si planea hacerlo más de una vez (es decir, más que un trabajo por lotes único), será un cuello de botella significativo en su procesamiento (especialmente si se espera que los datos crecer).

Parece que no necesita usar S3. Mongo ha implementado un adaptador para implementar trabajos de reducción de mapas en la parte superior de su MongoDB. http://blog.mongodb.org/post/24610529795/hadoop-streaming-support-for-mongodb

Esto parece atractivo ya que le permite implementar el MR en python/js/ruby.

Creo que esta configuración mongo-hadoop sería más eficiente que la copia de 100 GB de datos a S3.

ACTUALIZACIÓN: Un ejemplo del uso de map-reduce con mongo here.

Cuestiones relacionadas