Действительно ли MapReduce является правильным для меня?

Я работаю над проектом, который имеет дело с анализом очень большого объема данных, таким образом, я обнаружил MapReduce справедливо недавно, и прежде чем я погружусь дальше в него, я хотел бы удостовериться, что мои ожидания корректны.

Взаимодействие с данными произойдет от веб-интерфейса, таким образом, время отклика будет очень важно здесь, я думаю 10-15 вторых пределов. Принятие моих данных будет загружено в распределенную файловую систему, прежде чем я выполню какой-либо анализ его, какую производительность я могу ожидать от него?

Скажем, я должен отфильтровать простой XML-файл на 5 ГБ, который хорошо формируется, имеет довольно плоскую структуру данных и 10 000 000 записей в нем. И скажем, вывод приведет к 100 000 записей. Действительно ли 10 секунд возможны?

Если это, на какие аппаратные средства я смотрю? В противном случае, почему нет?

Я подавил пример, но теперь жаль, что не сделал. 5 ГБ были просто образцом, что я говорил о, и в действительности я буду иметь дело с большим количеством данных. 5 ГБ могли бы быть данными в течение одного часа дня, и я мог бы хотеть определить все записи, которые соответствуют определенным критериям.

База данных является действительно не опцией для меня. То, что я хотел узнать, - то, что является самой быстрой производительностью, которую я могу ожидать из использования MapReduce. Это находится всегда в минутах или часах? Это никогда - секунды?

8
задан PBG 13 January 2010 в 20:43
поделиться

5 ответов

MapReduce хороша для масштабирования обработки больших наборов данных, но она не предназначена для реагирования. Например, в реализации Hadoop накладные расходы запуска обычно занимают одну пару минут. Идея здесь состоит в том, чтобы взять работу по обработке, которая займет все времена и довести его до порядка часов, или часов в минуту и ​​т. Д. Но вы не начнуте новую работу в ответ на веб-запрос и ожидать, что он закончится в время ответить.

Чтобы прикоснуться к тому, почему это так, рассмотрим способ работы MapReduce (общий, общий обзор высокого уровня):

  • Куча узлов получает части входные данные (называемые расщеплениями) и сделать некоторая обработка (шаг карты)

  • промежуточные данные (выход из Последний шаг) перераспределен такой что данные с подобными ключами в конечном итоге вместе. Это обычно требует некоторых Передача данных между узлами.

  • Уменьшает узлы (которые не являются обязательно отличается от Mapper узлы - одна машина может сделать Несколько рабочих мест в преемственности) выполнять Снижение шага.

  • Данные результата собираются и объединены производить окончательный набор выходных данных.

В то время как Hadoop et al пытается сохранить местонахождение данных как можно более высокой, все еще существует значительное количество перетасовки, которое происходит во время обработки. Одно только это должно исключить вас от поддержки отзывчивого веб-интерфейса с распределенной реализацией MapReduce.

Редактировать : Как отметил Ян Джонгбома, Mapreatuce очень хорош для предварительной обработки данных, такие, как веб-запросы могут быть быстрыми, потому что им не нужно заниматься обработкой. Рассмотрим знаменитый пример создания перевернутого индекса из большого набора веб-страниц.

10
ответ дан 5 December 2019 в 10:03
поделиться

Распределенная реализация MapReduce, такая как Hadoop, плохо подходит для обработки 5 ГБ XML

  • Hadoop лучше всего работает с большими объемами данных. Несмотря на то, что 5 ГБ - это довольно большой XML-файл, его легко можно обрабатывать на одной машине.
  • Входные файлы для заданий Hadoop должны быть разбиваемыми так, чтобы различные части файла могли быть обработаны на разных машинах. Если ваш xml не является тривиально плоским, разделение файла будет не детерминированным, так что вам понадобится предварительный шаг обработки для форматирования файла для разделения.

Если у вас много файлов размером 5 ГБ, то вы можете использовать хадуп для распространения разделения. Вы также можете использовать его для объединения результатов между файлами и сохранения результатов в формате для быстрого запроса для использования в вашем веб-интерфейсе, как упоминалось в других ответах.

2
ответ дан 5 December 2019 в 10:03
поделиться

MapReduce - это общий термин. Вы, вероятно, хотите спросить, является ли полностью представленная каркас для MapReduce с помощью управления работой, такой как Hadoop, подходит для вас. Ответ по-прежнему зависит от структуры, но обычно контроль задания, сеть, репликация данных и функции отказов от неисправностей каркаса MapReduce делает его пригодным для задач, которые занимают минуты, часы или дольше, и это, вероятно, короткий и правильный ответ для тебя.

Парадигма MapReduce может быть полезной для вас, если ваши задачи могут быть разделены среди Maperdent Mappers и в сочетании с одним или несколькими редукторами, а также языком, рамки и инфраструктуру, которые у вас есть, позволяя вам воспользоваться этим.

Необходимо не обязательно различие между MapReduce и базой данных. Декларативный язык, такой как SQL, является хорошим способом абстрактного параллелизма, поскольку являются запросными каркасами в MapReduce, такие как HBASE. Эта статья обсуждает реализацию в MapReduce ALGORITH k-означает и заканчивается чистым примером SQL (который предполагает, что сервер может распараллелить его).

В идеале разработчик не должен слишком много знать о сантехнике вообще. Примеры Erlang Как показывать, как функционируют функции функции управления процессом.

Кроме того, имейте в виду, что есть легкие способы игры с MapReduce, такие как Bashreduce .

3
ответ дан 5 December 2019 в 10:03
поделиться

Похоже, что вы можете захотеть, это хорошая старомодная база данных. Не так ультрадно, как карта / уменьшение, но часто достаточно для небольших рабочих мест. В зависимости от того, насколько гибко ваша фильтрация должна быть, вы можете просто импортировать ваш файл 5 ГБ в базу данных SQL, либо вы можете самостоятельно реализовать собственную схему индексации, либо хранив записи в разных файлах, сохраняя все в памяти в Giant Hashtable, Или все, что подходит для ваших нужд.

0
ответ дан 5 December 2019 в 10:03
поделиться

Я недавно работал над системой, которая обрабатывает примерно 120 ГБ / час с 30 днями истории. Мы оказались с использованием Netezza для организационных причин, но я думаю, что Hadoop может быть подходящим решением в зависимости от деталей ваших данных и запросов.

Обратите внимание, что XML очень многословный. Одной из ваших основных расходов будет прочитать / запись на диск. Если вы можете, выбрал более компактный формат.

Количество узлов в вашем кластере будет зависеть от типа и количества дисков и CPU. Вы можете предположить, что вы можете предположить, что вы будете ограничены скоростью диска. Если ваш диск 7200RPM может сканировать на 50 МБ / с, и вы хотите отсканировать 500 ГБ в 10 с, тогда вам нужны 1000 узлов.

Вы можете захотеть играть с EC2 Amazon, где вы можете встать на кластер Hadoop и платить по минуту, или вы можете запустить работу в MapReduce на своей инфраструктуре.

2
ответ дан 5 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: