Подтвердить что ты не робот

Каков наилучший способ запуска Map/Reduce на данные из Mongo?

У меня есть большая база данных Mongo (100 ГБ), размещенная в облаке (MongoLab или MongoHQ). Я хотел бы запустить некоторые задачи Map/Reduce для данных, чтобы вычислить некоторые дорогие статистические данные, и задавался вопросом, какой лучший рабочий процесс для этого делается. В идеале я бы хотел использовать Amazon Map/Reduce, чтобы это сделать, а не поддерживать собственный кластер Hadoop.

Имеет ли смысл копировать данные из базы данных в S3. Затем запустите Amazon Map/Reduce на нем? Или есть лучшие способы сделать это.

Также, если дальше по строке я могу часто запускать запросы, как каждый день, поэтому данные на S3 должны были бы отражать то, что находится в Mongo, это усложнит ситуацию?

Любые предложения/истории войны были бы очень полезны.

4b9b3361

Ответ 1

Amazon S3 предоставляет утилиту S3DistCp для получения данных в S3 и из них. Это обычно используется при запуске продукта Amazon EMR, и вы не хотите размещать собственный кластер или использовать экземпляры для хранения данных. S3 может хранить все ваши данные для вас, и EMR может читать/записывать данные с/на S3.

Однако передача 100 ГБ потребует времени, и если вы планируете делать это более одного раза (т.е. больше, чем одноразовое пакетное задание), это будет значительным узким местом в вашей обработке (особенно если данные будут расти).

Похоже, вам не нужно использовать S3. Mongo внедрил адаптер для выполнения работ по сокращению карты поверх своего MongoDB. http://blog.mongodb.org/post/24610529795/hadoop-streaming-support-for-mongodb

Это выглядит привлекательно, поскольку позволяет реализовать MR в python/js/ruby.

Я думаю, что эта настройка mongo-hadoop была бы более эффективной, чем копирование 100 ГБ данных на S3.

UPDATE: пример использования map-reduce с mongo здесь.