Паттерны проектирования MapReduce

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

Фильтрующие паттерны - не меняют фактические записи из набора данных, а лишь выбирают те, которые удовлетворяют определенному запросу. В результате получаем новый набор отфильтрованных данных. Шаблон позволяет решать задачи выборки данных (семплирование), генерации топ-листов и др.

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

Суммирующие паттерны - создают полный суммированный список данных. Данные можно группировать, например, по полю, а затем вычислять некоторые статистические величины.

Эти паттерны используют для числовых обобщений - поиск минимальных, максимальных, средиих(тіп / max / avg) и других численных значений для набора данных, построения инвертированного индекса, котрый используется при создании поисковой системы или полнотекстового поиска для веб-сайта.

Структурные паттерны - решают проблемы реорганизации данных для более простого их анализа с помощью MapReduce, то есть обеспечивают возможность создания новых записей из данных, хранящихся в разных структурах или источниках. Например, при переносе данных из РСУБД в систему Hadoop данные должны быть переформатированы в более удобную структуру. Для Hadoop не важен формат данных структуры. Можно использовать иерархические данные, например, JSON или XML, чтобы избежать выполнения совместных объединений нескольких наборов данных во время их анализа.

Для применения данного паттерна необходимо выполнение следующих условий: исходные данные должны быть связаны набором внешних ключей (FK), структурированы и основаны на строках.

Combiner (полу-reducer) является необязательным классом, который получает данные от mapper, а затем отправляет пары «ключ-значение» на reducer. Основная функция - предобработка выхода mapper. Выход комбайнера поступает на вход reducer, передавая агрегированный результат для предобработанных таррег’ов. Важное отличие от reduce - на комбинирующую функцию попадают не все значения, соответствующие одному ключу. Однако Hadoop не гарантирует выполнение комбинирующей функции, так как она не всегда применима, например, в случае поиска медианного значения по ключу.

MapReduce Combiner не имеет предопределенного интерфейса, поэтому должен реализовать метод аналогичный функции свёртки; работает на каждом выходе функции отображения, где должен формировать пару «ключ-значение»; может подсчитать итоговый результат, т.к. заменяет оригинальный выход mapper.

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ   След >