УДК 330.47
Ермагамбетов Р.Т. студент магистратуры Киселев Е.С. студент магистратуры Санкт-Петербургский Государственный Университет
Россия, г. Санкт-Петербург СОВРЕМЕННЫЕ СИСТЕМЫ ХРАНЕНИЯ И ОБРАБОТКИ
БОЛЬШИХ ДАННЫХ: HADOOP И APACHE SPARK Аннотация: в рамках данной статьи были проанализированы основные характеристики таких Big Data систем, как Hadoop и Apache Spark, и выяснены причины, по которым на данный момент они являются наиболее популярными.
Ключевые слова: большие данные, системы хранения, Hadoop, Apache Spark, парадигма MapReduce.
Ermagambetov R. T.
Master of Science Saint-Petersburg State University Russia, Saint-Petersburg Kiselev E.S.
Master in Management Saint-Petersburg State University Russia, Saint-Petersburg MODERN SYSTEMS OF BIG DATA STORAGE AND PROCESSING: HADOOP AND APACHE SPARK Abstract: this article provides an analysis of the main characteristic of such Big Data systems as Hadoop and Apache Spark and reasons contributing to their popularity.
Keywords: Big Data, storage systems, Hadoop, Apache Spark, MapReduce paradigm.
На протяжении последних пяти лет термин «Big Data» можно было увидеть повсеместно. Еще совсем недавно большинство компаний не имело никакого представления о том, что же такое Big Data, какие данные можно считать действительно большими, как их обрабатывать, как внедрить у себя соответствующую архитектуру и, наконец, научиться извлекать ценность из данных и начать получать дополнительную прибыль, используя всю базу, которая накопилась у компании в процессе ее деятельности. Чтобы оценить степень интереса за предыдущие года можно обратиться к статистике поисковой системы Google:
А _ jA /\г
мж 201 а
ищ rinn 0Й V
Apaciif Hodsup ftU
Apac-fie &зйт
Vtahn r™ Pin piirfi hiWf piiilirf
JiriCCrtUff*Ii i ЦДк aVJUlOZlhJ
Рисунок 7 Динамика популярности термина «Big Data» в поисковой системе Google
Источник: Поисковая система Google. URL:
https://trends.google.ru/trends/
Как мы можем видеть на рис. 1, на данный момент Big Data находится на пике своей популярности. Однако, что еще более важно, сегодня данная технология, наконец, достигла зрелости: на рынке присутствует несколько крупных вендоров с отличной экспертизой, которые готовы внедрить архитектуру хранения больших данных в компанию, а также огромной популярностью пользуются проекты с открытым исходным кодом. Эти проекты может использовать и доработать любой желающий, подстраивая их под нужды компании. В рамках данной статьи мы рассмотрим два наиболее популярных фреймворка работы с большими данными: экосистему Hadoop и Apache Spark.
Однако перед тем, как мы более подробно познакомимся с этими системами, необходимо разобраться в терминологии и определить значение термина Big Data, а также разобрать основные принципы работы с такими данными.
В 2001 году компанией MetaGroup была предложена концепция «3V», которая определяла Большие Данные как совокупность трех элементов20:
• Volume (объем). Объем данных, которым обладает компания должен быть действительно большим. Однако многие эксперты расходятся во мнении, какой объем данных можно считать таковым. Наиболее популярными подходами к классификации данных являются, во-первых, подход на основе методов обработки этих данных и, во-вторых, подход на основе их физических объемов. Приверженцы первого подхода считают, что данные можно считать большими, если традиционными методами и архитектурами невозможно проводить анализ над всем объемом данных, и необходимо использовать специальные методы работы с ними и внедрять Big Data архитектуру. С точки зрения второго подхода компанией самостоятельно задается порог физического объема данных (500 Гб, 1 Тб и т.д.), который и отделяет Big Data.
• Variety (вариативность). В отличии от XX века, когда подавляющую долю данных в компаниях составляла количественная
20 Laney D. 3-D Data Management: Controlling Data Volume, Velocity and Variety. Application Delivery Strategies by META Group Inc. 2001, p. 949.
информация, которую удобно было хранить в формате таблиц и реляционных баз данных, сегодня компании собирают огромное количество данных самых различных типов: изображения, аудио- и видеозаписи, записи из социальных сетей и т.д. Конечно, всю эту информацию невозможно хранить в реляционных базах данных, поэтому необходимо было разработать специальные методы их хранения в одном месте с быстрым и удобным доступом к ним.
• Velocity (скорость). Также еще один из трендов современности — это скорость обработки и передачи информации. В текущем обществе необходима быстрота принятия решений в компаниях, иначе можно потерять все преимущества. К примеру, когда пользователь сети Интернет переходит по ссылке на сайт, необходимо за доли секунды определить, какой рекламный баннер ему показать, иначе он будет видеть пустые места на странице и быстро потеряет интерес. Именно поэтому современные ИТ-инфраструктуры должны обладать возможностью в реальном времени проводить сложные вычисления.
Таким образом, понятие Big Data включает в себя не только данные, но и инфраструктуру, алгоритмы и методы обработки данных. Теперь перейдем к рассмотрению принципов работы с большими данными, ведь именно на них и основываются все современные фреймворки и системы21:
• Инфраструктура данных горизонтально масштабируема. Поскольку объем данных в компании постоянно растет, и невозможно определить, до какого предела он будет продолжать увеличиваться, Big Data архитектура должна обладать свойством горизонтальной масштабируемости, то есть при многократном увеличении объема данных нет необходимости перестраивать всю ИТ-инфраструктуру в компанию, а вместо этого можно лишь докупить мощностей, чтобы все функционировало в том же порядке.
• Независимое должно обрабатываться независимо. Любая Big Data архитектура подразумевает распределенное хранение данных на множестве кластеров. Очень важно, чтобы вычисления над данными производились на том же кластере, где они хранятся, поскольку затраты на передачу данных выше, чем на их обработку. Следовательно, если можно обойтись без переноса данных с одного кластера на другой, следует поступать именно так.
• Сложный процесс обработки данных следует разбить на несколько простых. Главное преимущество следования данному принципу заключается в том, что для выполнения какого-либо запроса можно задействовать все имеющиеся мощности, а затем соединить результаты нескольких простых операций воедино, что значительно увеличивает скорость и производительность вычислений. К примеру, именно на этой идее основана фундаментальная Big Data парадигма MapReduce, о которой мы будем говорить ниже.
21 Силен Д., Мейсман А., Али М. Основы Data Science и Big Data. Python и наука о данных. 4 изд. Спб.: Питер, 2017. 336 с.
В итоге, рассмотрев основные теоретические аспекты концепции Big Data, мы можем перейти к более детальному изучению Big Data архитектур и проектов.
Парадигма MapReduce
В 2004 году инженеры компании Google предложили парадигму работы с большими данными MapReduce, которая лежит в основе современных Big Data систем. Данная парадигма позволяет проводить распределенные вычисления на сотнях и тысячах кластеров вне зависимости от объема данных. При этом ее основная идея, которая основана на принципах работы с большими данными, проста и интуитивно понятна. Перейдем к ее изучению.
Парадигма MapReduce применима в случае, когда имеется некий набор данных, каждая часть которого хранится на отдельном кластере. Сам Процесс MapReduce состоит из трех основных этапов, каждый из которых проиллюстрирован на рис. 2:
How MapReduce Works?
ЛНИЬ^
И-О^ОСЛ
л1п1к /
11 -с
jiiiihO'nX
ll-ot J^O-O
f.l.-.ilii ...........1v rli 1г.гч : ШрЛЫЛф.Н^ишЬстпГ'ЯШ
Рисунок 8 Схема работы парадигмы MapReduce
Источник: URL: htttp://blog.sqlauthority.com
Для большей ясности каждую из стадий мы будем иллюстрировать на примере. Предположим, что у нас имеется некий набор данных, содержащий информацию о наших клиентах. Для проведения маркетинговой кампании нам сначала необходимо посчитать количество мужчин и женщин среди клиентов. Чтобы достичь цели, в рамках парадигмы MapReduce необходимо выполнить следующие шаги22:
• Стадия Map. На данной стадии происходит предварительная фильтрация данных. В рамках каждого кластера работает функция map(),
22 Dean J., Ghemawat, S. Mapreduce: simplified data processing on large clusters. In OSDI'04: Proceedings of the 6th conference on Symposium on Opearting Systems Design & Implementation (Berkeley, CA, USA, 2004), USENIX Association, pp. 10-10.
которая на вход принимает часть данных, а на выходе мы получаем соответствующий набор пар «ключ-значение». Так, применительно к нашей задаче, если один из кластеров примет на вход следующую выборку по полу: «Мужчина, Женщина, Женщина, Мужчина, Женщина», то на выходе мы имеем следующий набор пар: «(Мужчина, 1), (Женщина, 1), (Женщина, 1), (Мужчина, 1), (Женщина, 1)».
• Стадия Shuffle. На данной стадии незаметно для пользователя данные сортируются по различным узлам кластера так, чтобы в одном узле оказались пары «ключ-значение» с одинаковыми ключами. Так, к примеру, в задаче распределения клиентов по полу будет сформировано два набора пар: «(Мужчина, 1), (Мужчина, 1)» и «(Женщина, 1), (Женщина, 1), (Женщина, 1)».
• Стадия Reduce. Данная стадия является завершающей. На ней происходит подсчет результатов всего запроса. Завершая наш пример, можно сказать, что после стадии Reduce мы, наконец, получим наши результаты путем сложения значений с равными ключами в каждом узле: «(Мужчина, 2)» и «(Женщина, 3)». Таким образом, с помощью парадигмы MapReduce мы выяснили, что среди наших клиентов двое мужчин и трое женщин.
Основное преимущество MapReduce заключается в том, что с ее помощью выполняются все основные принципы работы с большими данными: процесс горизонтально масштабируем, разделен на несколько простых операций и позволяет обрабатывать данные на том же кластере, где они и хранятся, чтобы потом собрать воедино результат расчета. Главный же недостаток — это тот факт, что при каждом запуске процесса MapReduce необходимо проводить вычисления над всей базой данных, вне зависимости от того, требуются ли нам все данные или же только их часть. Это условие замедляет расчеты, не позволяя выдавать результат в реальном времени, а значит эта парадигма непригодна для real-time систем.
Экосистема Hadoop
На первом этапе необходимо рассказать об истории появления Hadoop — наиболее популярного сегодня фреймворка с открытым исходным кодом для масштабируемых, надежных, распределенных вычислений. Как уже было отмечено, в 2004 была разработана и представлена парадигма MapReduce, однако ее программная реализация не была разработана, пока в 2005 году бывшими разработчиками компании Yahoo не была представлена первая версия системы распределенных вычислений Hadoop.
Hadoop устроен таким образом, что вся вычислительная нагрузка равномерно распределяется между всеми машинами кластера, чтобы оптимизировать производительность расчетов. Более того, Hadoop создает копии данных, храня их на нескольких разных узлах кластера, что увеличивает надежность хранения данных, поскольку в случае, если одна или более машин кластера будут неисправны, то данные не будут потеряны. При этом на первых этапах своего развития Hadoop представлял собой лишь
инструмент хранения данных и выполнения MapReduce запросов, но за последние годы активного развития он превратился в огромный стек различных технологий. На данный момент Hadoop — это целостная экосистема обработки и хранения больших данных, достаточно гибкая и разносторонняя, чтобы обеспечить нужды практически любой компании.
Теперь остановимся на наиболее важных из тех инструментов, которые входят в экосистему Hadoop23.
Hadoop Distributed File System (HDFS). HDFS — это распределенная файловая система, разработанная специально для Hadoop и позволяющая хранить данные без каких-либо ограничений на объем. Она играет ключевую роль в экосистеме Hadoop, поскольку, во-первых, масштабируема, позволяя за разумное время обрабатывать петабайты данных. Во-вторых, она устойчива к сбоям в системе, так как данные в ней реплицируются в несколько блоков. Наконец, она позволяет значительно экономить средства на покупке дополнительного оборудования для хранения данных.
Рисунок 9 Архитектура HDFS
Источник: URL: https://blog.cloudera.com/
Структура HDFS представлена на рис. 3. Файловая система состоит из двух основных компонентов: Name Node (главный узел) и Data Nodes (узлы данных). Основная функция Name Node заключается в управлении метаданными файловой системы. Метаданные главного узла содержат информацию о том, в каком из узлов данных хранятся те или иные данные. Таким образом, Name Node «знает», какие блоки в узлах данных содержат необходимую пользователю информацию. Это значит, что, когда пользователь отправляет запрос на HDFS, клиентское приложение взаимодействует с главным узлом, получая от него информацию о том, из каких блоков следует извлечь данные. В свою очередь Data Nodes отвечают за хранение данных, а также принимают активное участие в репликации блоков данных в случае сбоев.
Hbase. Одна из главных проблем HDFS заключается в том, что файлы
23 Гусейнов А.А., Бочкова И.А. Исследование распределенной обработки данных на примере системы Hadoop // Актуальные проблемы авиации и космонавтики. 2016. №1. С. 604-607.
в системе неудобно обновлять, а также отсутствует произвольный доступ к данным. Именно поэтому инженерами Google была разработана нереляционная распределенная база данных типа «ключ-значение», Hbase. Она позволяет хранить данные на множестве машин кластере, при этом данные организованы в таблицах, доступ к которым можно получить через соответствующие ключи. Hbase можно представить в виде огромного списка пар «ключ-значение», отсортированного для более легкого доступа, в то время как в HDFS данные хранятся в виде файлов.
Hbase был создан для того, чтобы решить проблему Hadoop с аналитикой в реальном времени, поскольку его пользовательский интерфейс достаточно хорош, чтобы быстро обрабатывать различные запросы на запись и извлечение данных. Наиболее эффективно использовать Hbase в связке с Hadoop следующим образом: в Hadoop следует хранить статические данные, редко подверженные изменениям, тогда как в Hbase загружаются данные, которые необходимо периодически обрабатывать для аналитических задач.
Hive. Hive — это SQL-движок над Hadoop-ом, который позволяет пользователям писать SQL запросы, которые запускаются на основе парадигмы MapReduce, благодаря чему данные запросы могут обрабатывать неограниченно большие объемы данных за разумное время. Hive устроен таким образом, чтобы разработчики могли проектировать схему реляционной базы данных, но не над таблицами, как в классическом SQL, а над различными неструктурированными данными в виде файлов как внутри, так и вне Hadoop-кластера. Таким образом, Hive предназначен для пакетной обработки больших данных в реальном времени и написания крупных аналитических запросов, при этом избавляет разработчиков от нужды написания трудоемких MapReduce запросов вручную. Вместо этого они могут использовать привычный для них язык управления базами данных SQL, в то время как Hive самостоятельно преобразует SQL-запросы в MapReduce.
Итак, на данном этапе мы рассмотрели наиболее важные инструменты экосистемы Hadoop, их функции и внутреннее устройство. Исходя из этого мы можем выделить основные преимущества и недостатки данного Big Data стека технологий.
К преимуществам экосистемы Hadoop стоит отнести24:
• Гибкость.
• Горизонтальная масштабируемость.
• Позволяет экономить на программном оборудовании для кластера.
• Отказоустойчивость.
В то время, как среди недостатков технологии стоит выделить:
• Не подходит для потоковой обработки данных.
• Не подходит для обработки маленьких объемов данных.
• Уязвимость к кибератакам, поскольку целиком написан на языке
24 T. White. Hadoop: The Definitive Guide. Yahoo Press, 2010, p. 756.
Java.
• Процесс MapReduce занимает довольно продолжительное время.
Apache Spark
Как мы уже отмечали выше, основными недостатками Hadoop и парадигмы MapReduce являются, во-первых, тот факт, что стадии Map и Reduce, распределяя блоки данных по всему кластеру, занимают довольно долгое время, что накладывает некоторые ограничения. Во-вторых, Hadoop, делая упор на объем данных (Volume), не поддерживает потоковую обработку данных (Velocity). Это значит, что для задач, при которых необходимо принятие решений в реальном времени (рекомендательные системы, обработка геоданных и т.д.), необходимо искать другие инструменты.
Данные проблемы были решены в 2010 году, когда была представлена первая версия Apache Spark — распределенная система с открытым исходным кодом для быстрой работы с большими данными. Главное преимущество Spark-а — возможность проводить вычисления в оперативной памяти, что позволяет обрабатывать данные более, чем в 10 раз быстрее, чем Hadoop25.
Таким образом, в случае, если в базы данных компании данные поступают непрерывно из разных источников, то производительность Hadoop будет чрезвычайно низкой, и лучше будет использовать Spark, который и был создан как раз для этих целей. Однако, стоит отметить, что в рамках компании Hadoop и Spark не взаимоисключают друг друга, а дополняют. Spark довольно легко можно интегрировать в экосистему Hadoop и использовать его параллельно с технологиями стека Hadoop.
Перейдем к изучению внутреннего устройства Apache Spark, каждый
Рисунок 10 Архитектура Apache Spark
Источник: URL: https://www.toptal.com/
25 Zaharia M., Chowdhury M., Franklin M. Spark: cluster computing with working sets. In Proceedings of HotCloud '10, 2010, pp. 1-14.
• Spark SQL. Spark SQL представляет собой основной интерфейс работы со структурированными данными в Spark-е, которые имеют вид датафреймов (dataframe), концепция которых была позаимствована у наиболее популярных языков программирования в анализе данных: R и Python. Используя Spark SQL, data scientist может работать с данными на кластере так, как он бы это делал на своем локальном сервере, используя, к примеру, Python, что дает Spark-у преимущество перед Hadoop. Более того, помимо написания запросов, Spark SQL позволяет считывать данные из множества источников, начиная от JSON и HDFS и заканчивая Apache Parquet26.
• Spark MLlib. Еще одним плюсом Spark-а является наличие собственной библиотеки машинного обучения, где реализовано большинство наиболее популярных алгоритмов. Также библиотека включает в себя фреймворк по созданию пайплайнов машинного обучения, с помощью которого можно автоматизировать процесс извлечения признаков из данных, обучения и валидации модели. Наконец, модели могут быть обучены на привычном для аналитиков языке Python, а затем загружены в пайплайн, написанный на языке Java, для использования модели в продуктивной среде27.
• Spark GraphX. Еще одним инструментом, включенным в Spark, является Graph X — библиотека, в которую входит набор алгоритмов для обработки графовых структур, включая реализацию алгоритма PageRank от Google — он используется, к примеру, для ранжирования страниц в поисковых запросах.
• Spark Streaming. Изначально в рамках экосистемы Hadoop пакетная и real-time обработка данных были двумя отдельными задачами. В первом случае использовались традиционные MapReduce запросы, а если требовался анализ данных в реальном времени, то подключалась утилита Apache Storm. Проблема такого подхода очевидно: создаются две раздельные кодовые базы, которые необходимо как-то синхронизировать, учитывая использование совершенно разных фреймворков, отличия в потреблении ресурсов и т.д. Spark Streaming решил это проблему путем разбиения всего процесса пакетной обработки данных на множество мелких потоковых процессов, которыми впоследствии можно управлять с помощью Apache Spark API. Благодаря использованию такого подхода кодовые базы для пакетной и потоковой обработки данных пересекаются и запускаются с помощью одного и того же фреймворка, что значительно увеличивает производительность28.
26 Armbrust M., Xin R., Lian, C. Spark SQL: Relational data processing in spark. In ACM Special Interest Group on Management of Data, 2015, pp. 1-12.
27 Meng X., Bradley J., Yuvaz B. MLlib: Machine learning in Apache Spark. In Journal of Machine Learning Research, 17(34):1D7, 2016, pp. 1-7.
28 Zaharia M., Das T., Li H. Discretized streams: Fault-tolerant streaming computation at scale. In Symposium on Operating Systems Principles, 2013, 1-16.
Подводя итоги этой части, выделим преимущества и недостатки фреймворка Apache Spark. Начнем с преимуществ:
• Скорость обработки потоковых данных.
• Наличие библиотек машинного обучения и анализа графовых структур.
• Наличие большого количества фреймворков для интеграции моделей в готовые сервисы и продукты.
• Вычисления осуществляются в оперативной памяти, значительно ускоряя пакетную обработку данных.
• Отказоустойчивость.
Тем не менее, и эта технология обладает рядом недостатков:
• Spark достаточно дорог с точки зрения потребления оперативной памяти.
• Отсутствует собственная файловая система, аналогичная HDFS в Hadoop.
• Низкая производительность при работе с множеством файлов маленького размера.
Таким образом, Apache Spark на сегодняшний день является одной из наиболее популярных технологий для обработки больших данных, поскольку отвечает всем требованиям современного анализа данных, как по производительности, так и по скорости вычислений.
Заключение
К 2018 году подавляющее большинство компаний, как в России, так и по всему миру уже внедрили, либо находятся на стадии внедрения Data Science решений в свои бизнес-процессы, поскольку анализ данных несомненно доказал свою эффективность во многих сферах человеческой деятельности. Модеbbли машинного обучения позволяют компаниям генерировать дополнительные сверхприбыли за счет оптимизации внутренних процессов, роста конверсии от маркетинговых компаний, улучшения риск-менеджмента и т.д.
Однако, чтобы алгоритмы оказались действительно качественными и могли с наибольшей точностью моделировать окружающую среду и происходящие в ней процессы, она должна быть обучена на достаточно большом и репрезентативном наборе данных. Следовательно, необходимо наличие достаточно производительной Big Data архитектуры, способной хранить и обрабатывать объемные массивы информации.
В рамках данной статьи мы обсудили основные характеристики таких Big Data систем, как Hadoop и Apache Spark, и выяснили причины, по которым на данный момент они являются наиболее популярными. Интеграция каждой из этих технологий в компанию обеспечит ее надежной инфраструктурой для решения тех задач анализа данных, которые она перед собой поставит.
Использованные источники:
1. Аббакумов В., Лезина Т. Бизнес-анализ информации. Статистические методы. - М.: «Экономика», 2009. - 374 с.
2. Гусейнов А.А., Бочкова И.А. Исследование распределенной обработки данных на примере системы Hadoop // Актуальные проблемы авиации и космонавтики. 2016. №1. С. 604-607.
3. Самарев Р.С. Обзор состояния области потоковой обработки данных // труды ИСП РАН. 2017. №1, том 29. С. 231-260.
4. Силен Д., Мейсман А., Али М. Основы Data Science и Big Data. Python и наука о данных. 4 изд. Спб.: Питер, 2017. 336 с.
5. Armbrust M., Xin R., Lian, C. Spark SQL: Relational data processing in spark. In ACM Special Interest Group on Management of Data, 2015, pp. 1-12.
6. Dean J., Ghemawat, S. Mapreduce: simplified data processing on large clusters. In 0SDI'04: Proceedings of the 6th conference on Symposium on Operating Systems Design & Implementation (Berkeley, CA, USA, 2004), USENIX Association, pp. 10-10.
7. Laney D. 3-D Data Management: Controlling Data Volume, Velocity and Variety. Application Delivery Strategies by META Group Inc. 2001, p. 949.
8. Meng X., Bradley J., Yuvaz B. MLlib: Machine learning in Apache Spark. In Journal of Machine Learning Research, 17(34):1D7, 2016, pp. 1-7.
9. T. White. Hadoop: The Definitive Guide. Yahoo Press, 2010, p. 756.
10.Zaharia M., Das T., Li H. Discretized streams: Fault-tolerant streaming computation at scale. In Symposium on Operating Systems Principles, 2013, 1-16.