Работа с большими объемами данных в облаке с помощью MapReduceИсточник: IBM
Законы микроэкономики утверждают, что система из специализированных элементов является более эффективной, чем та, в которой большинство участников выполняют все разнообразные действия, необходимые для существования этой системы. Образно говоря, мастер на все руки менее продуктивен в каждом конкретном деле, чем специалист в данной области. Этот факт известен под названием "сравнительное преимущество" (comparative advantage) - индивидуум имеет преимущество в выполнении специфической задачи, если он более опытен в выполнении этой задачи относительно других задач. Специализация способствует получению специфичных навыков. Облачные вычисления прекрасно дополняют абстракцию MapReduce, позволяя не задумываться о том, где именно осуществляются операции над конкретными числами. Прежде чем рассматривать пример, давайте выясним, почему так успешна MapReduce. MapReduce и облакоПринцип программирования MapReduce был разработан в Google. В документе MapReduce: упрощение обработки данных в больших кластерах (EN), опубликованном инженерами Google, подробно описываются принципы работы MapReduce. С момента появления этой публикации в 2004 году появилось множество реализаций MapReduce с открытыми исходными кодами. Одной из причин успеха принципа MapReduce является то, что он разрабатывался как простая парадигма написания кода, пригодного для массового распараллеливания. Она родилась из идей функционального программирования языка Lisp и других функциональных языков. Теперь самое интересное: почему MapReduce и облачные вычисления предназначены друг для друга? Основным выигрышным моментом MapReduce является ее способность отделить семантику оперативного распараллеливания (как именно осуществляется распараллеливание) от разработчика. Если вы работаете в компании, имеющей тысячи свободных машин, - вам повезло, но обычно это не так. И даже при наличии свободных ресурсов часто возникает множество технических, политических и логистических барьеров, которые нужно преодолеть для построения в организации grid-системы.
Используя облако, разработчик может написать сценарий, который загружает любое количество машин и выполняет операции MapReduce, а затем оплатить только то время, которое использовалось на каждой системе. Это может быть 10 минут или 10 месяцев, но в любом случае это просто. Отличный пример этой парадигмы имел место в Yelp ("Реальные люди. Реальные обзоры®: сайт обзоров для местных компаний"). В техническом блоге компании недавно появилась история о том, как компания использовала MapReduce для реализации функциональности своего сайта под названием People Who Viewed this Also Viewed... (Люди, просматривающие это, также просматривают…). Это классическая проблема больших данных, поскольку Yelp ежедневно генерирует 100 ГБ журнальных данных. Вначале инженеры установили свой собственный кластер Hadoop, но в конечном итоге написали свою собственную MapReduce-инфраструктуру mrjob, работающую на сервисе Amazon Elastic MapReduce. Дэйв М. (Dave M), инженер по поиску и извлечению данных Yelp, рассказывает: "Как мы реализовали функциональность People Who Viewed this Also Viewed...? ... Как вы могли бы догадаться, мы использовали MapReduce. MapReduce - это простейший способ разбить большую работу на маленькие части. По существу, распределители (mappers) читают строки входной информации и выдают кортежи ключ/значение (key, value). Каждый ключ и все соответствующие ему значения направляются в reducer... простое задание MapReduce, подсчитывающее частоту встречаемости слов и написанное в нашей Python-среде mrjob". Дэйв М. продолжает: "Мы делали то, что делают многие компании, работающие с кластером Hadoop... всякий раз, размещая наш код на Web-серверах, мы направляли его в Hadoop-машины. Отчасти это было круто - наши задания могли ссылаться на любой другой код в нашей базе кода. Но также это было не очень круто. Нельзя было с уверенностью сказать, собирается ли вообще выполняться задание, если не подтолкнуть его. Но, что хуже всего, большую часть времени наш кластер простаивал, затем изредка проходила действительно объемная работа, занимающая все наши узлы, при этом все остальные задания вынуждены были ждать". MapReduce, выполняющаяся в облаке Amazon, помогла Yelp отправить в отставку их собственный кластер Hadoop. А инфраструктура Yelp mrjob теперь настолько стабильна (на протяжении года), что компания предоставила ее в общее пользование на GitHub. Сочетание облачных вычислений и MapReduce идеально приспособлено для работы с большими объемами данных. Теперь я покажу вам, как обрабатывать большое количество журнальных данных. Обработка реального журнального файлаРеальной проблемой, с которой сталкиваются многие, является обработка больших объемов журнальных данных. Исходный код, приведенный в листинге 1 (также доступен для загрузки), является примером того, как обработать 6.3 ГБ журнальных файлов Internet Information Services (IIS), используя только модуль многопроцессорной обработки Python. Его работа на MacBook Pro продолжалась примерно 2 минуты, в результате чего было получено 25 наиболее часто встречающихся IP-адресов. Листинг 1. Использование модуля MP Python для обработки 6.3 ГБ журнальных файлов
На рисунке 1 приведена схема обработки. Рисунок 1. Схема MapReduce для журнального файла IIS Давайте рассмотрим исходный код. Как можно заметить, он крошечный по объему и состоит примерно из 50 строк:
Хотя для простоты объяснения MapReduce мы используем многопроцессорный модуль, если немного изменить этот код, он будет работать и в другом облаке MapReduce. Полный вывод результатов работы приведен в листинге 2. Листинг 2. Полный вывод результатов выполнения листинга 1
В основанных на облачных вычислениях реализациях MapReduce (как с открытыми исходными кодами, так и коммерческих) нет недостатка. Можно легко взять примеры из данной статьи и применить их к петабайтам журнальных файлов; именно этим полезна абстракция MapReduce, особенно в облачной среде.
Загрузка
|