UA-11904844-8

Модель MapReduce

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

Работа MapReduce состоит из двух основных процессов, создаваемых программистом: шага «map» и шага «reduce». Отсюда и название MapReduce. Эти шаги передаются в фреймворк MapReduce, который параллельно запускает программы в наборе рабочих узлов. Вспомните, что при использовании массивно-параллельной системы данные распределяются по узлам, которым затем можно адресовать запрос. В случае с MapReduce используется большое количество недорогого оборудования, на которое по мере необходимости запуска процесса передаются данные. Каждый из рабочих узлов MapReduce применяет один и тот же код к своей части данных. Тем не менее рабочие узлы не взаимодействуют и даже не знают о существовании друг друга.

При наличии постоянного потока данных веб-журналов они могут быть розданы фрагментами различным рабочим узлам. Простейший способ — циклическая процедура (round-robin), при которой записи последовательно снова и снова передаются в узлы. Часто применяются некоторые виды хеширования, в этом случае записи передаются рабочим узлам на основе формулы, чтобы похожие записи отправлялись одному и тому же узлу. Например, при хешировании идентификатора клиента все записи, касающиеся данного клиента, передаются одному и тому же рабочему узлу. Это очень важно, если планируется проведение анализа по идентификатору клиента.

Сайт Mapreduce.org определяет модель MapReduce как программный каркас для упрощения обработки массивных наборов данных. Hadoop — популярная версия MapReduce с открытым исходным кодом, поставляемая организацией Apache. Hadoop представляет собой самую известную реализацию фреймворка MapReduce. В данном разделе мы будем использовать общий термин MapReduce, однако вся дальнейшая информация касается любой его реализации.

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

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

* MapReduce — модель распределенных вычислений, представленная компанией Google, используемая для параллельных вычислений над очень большими (в несколько пета-байт) наборами данных в компьютерных кластерах. Прим. перев.