UA-11904844-8

Некоторые вычисления и алгоритмы невозможно точно преобразовать в код SQL или встроить в определенную пользователем функцию в рамках данных базы. В этих случаях необходимо поместить данные в более традиционную аналитическую среду и применить к ним аналитический инструмент традиционным способом.

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

Грид-вычисления могут оптимизировать как стоимость, так и производительность. Данное понятие относится к категории «высокопроизводительных вычислений». Вместо одного высокопроизводительного сервера (или нескольких серверов) используется большое количество менее дорогих компьютеров. В данном случае не сервер распределяет свои вычислительные ресурсы между заданий, а задания распределяются по разным компьютерам и обрабатываются параллельно. Каждый из этих компьютеров может обладать только частью возможностей исходного сервера и обрабатывать только одно задание за один раз. А в совокупности компьютеры этой грид-сети обрабатывают большие объемы данных. Таким образом, грид-вычисления могут стать экономически эффективным механизмом для увеличения общей пропускной способности и мощности, а кроме того, дадут возможность организации распределять рабочую нагрузку, приоритезировать задания и обеспечивать высокую доступность для аналитической обработки.

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

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

По мере того как развиваются сложные методы моделирования и такие способы, как товарное моделирование (об этом — в главе 6), продолжают набирать популярность, грид-сеть поможет эффективно справиться с дополнительными рабочими нагрузками, возникающими при моделировании.


Модель 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, используемая для параллельных вычислений над очень большими (в несколько пета-байт) наборами данных в компьютерных кластерах. Прим. перев.


Принцип работы MapReduce

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

Далее программист предоставляет планировщику две программы: «map» и «reduce». При этом двухэтапном процессе программа «map» находит данные на диске и выполняет содержащиеся в ней инструкции. Это происходит на каждом из 20 серверов в нашем примере. Затем результаты выполнения программы «map» передаются процессу «reduce» для агрегации итоговых ответов. На рис. 4.6 этот процесс представлен наглядно.

Процесс mapreduce

Рис. 4.6. Процесс MapReduce

Рассмотрим пример, когда организация получает большой объем текстовых данных из онлайн-чатов отдела обслуживания клиентов на своем сайте. Аналитик создает map-шаг, чтобы разобрать каждое слово, присутствующее в тексте. В данном примере функция map будет просто находить каждое слово, отделять его от абзаца и присваивать ему номер 1. В результате получится набор пар значений, например «», «», «». После выполнения map-шага каждый рабочий узел сообщает об этом планировщику.

После окончания map-шага запускается reduce-шаг. На этом этапе нужно выяснить, сколько раз каждое слово встречается в тексте. То, что происходит далее, называется сортировкой, во время которой результаты map-шага распределяются с помощью хеширования так, чтобы одни и те же ключевые слова в итоге оказались в одних и тех же узлах. Например, в простом случае существовало бы 26 reduce-узлов, так что все слова, начинающиеся с буквы A, направлялись бы в один узел, слова на букву B — во второй, слова на букву C — в третий и т. д.

Разделяйте работу, часть 2!

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

На reduce-шаге происходит просто пересчет слов. В нашем примере результатом проведения reduce-шага будет: «», «», «», где числа соответствуют количеству найденных в тексте слов. Будет сгенерировано 26 файлов (по одному для каждого reduce-узла) с отсортированными числами. Следует отметить, что для создания 26 выходных файлов необходим еще один процесс. Чтобы получить итоговый набор ответов, часто требуется несколько процессов MapReduce.

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

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

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

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


Сильные и слабые стороны модели MapReduce

Процесс MapReduce работает на стандартном недорогом оборудовании. Это означает, что его можно наладить с небольшими затратами. Кроме того, его расширение обойдется довольно дешево. Увеличить емкость легко, поскольку все, что требуется, — это дополнительные серверы и их интеграция.

Мы уже говорили о том, что с решением некоторых задач MapReduce справляется гораздо лучше, чем реляционные базы данных. Это разбор текста, обработка данных веб-журналов и чтение информации из огромного источника необработанных данных. Модель MapReduce наиболее эффективна в случаях, когда существует большой объем входных данных, б?льшая часть которых не нужна для анализа. Если большое значение имеет малая часть данных, но заранее неясно, какая именно, то MapReduce может помочь. Этот алгоритм позволяет разобраться в большом объеме данных и извлечь важные фрагменты.

Словно пить из шланга

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

Нет смысла тратить много времени и ресурсов на загрузку огромного количества необработанной информации в корпоративное хранилище данных, если в процессе их обработки б?льшая часть будет отброшена. Если данные нужны только на короткий период, не стоит помещать их в хранилище данных. Модель MapReduce идеально подходит в таких случаях. Отбросьте излишки информации до ее загрузки в базу данных.

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

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

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


Итоги

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

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

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

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

После выполнения первоначальной задачи наиболее важные фрагменты данных загружаются в базу данных и пополняют остальную важную информацию о клиенте, что позволяет производить более полный стратегический анализ по периодам и подразделениям организации. В данном примере список выявленных клиентов загружается в базу данных — так учитывается, что им были отправлены электронные письма. Это позволит отследить историю переписки, как это делается при проведении любой e-mail-кампании.

Укрощение больших данных: как извлекать знания из массивов информации с помощью глубокой аналитики / Билл Фрэнкс. - М.: Манн, Иванов и Фербер, 2014.
Опубликовано с разрешения издательства