0

Большие данные, Apache Hadoop и Apache Spark

26.04.2022

Изучая вопросы хранения, обработки и анализа данных, было бы неправильно обойти такую концепцию, как большие данные (Big Data). Давайте рассмотрим облачные технологии для работы с большими данными.

Big Data

Как понять, что данные по-настоящему большие? Обычно к таким относят данные, размер которых увеличивается хотя бы на 100 ГБ в день. Данные при этом могут быть и структурированными, и нет.Источники больших данных в современном мире — это социальные сети, сайты и СМИ, информация, которую компании собирают для бизнеса, а также интернет вещей с миллионами датчиков. Чтобы оценить масштаб, приведём лишь несколько примеров: датчики беспилотного автомобиля генерируют примерно 6 ГБ данных за каждый километр пути, морской нефтяной платформы — до 1 ТБ за неделю, а пассажирского авиалайнера — до 20 ТБ за час полёта.Большие данные всё активнее используются в государственном управлении и бизнесе. Например, в компьютерных играх с помощью больших данных анализируют поведение игроков и делают выводы о предпочтениях аудитории. Это позволяет лучше понимать, как развивать игру, чтобы она оставалась популярной и приносила прибыль.Чтобы работать с такими объёмами данных в реальном времени, необходимы специальные технологии. В их основе лежат три принципа:

  1. Распределённое хранение и обработка. Данных много, а их обработка требует больших вычислительных ресурсов, поэтому необходимы распределённые системы из большого количества узлов. Создать такую систему и обеспечить её высокую производительность — непростая задача.
  2. Горизонтальная масштабируемость. Данные постоянно накапливаются, а задачи их обработки варьируются от относительно простых до очень сложных. Поэтому нужна возможность легко наращивать объёмы хранилища и гибко изменять количество узлов, на которых обрабатываются данные.
  3. Отказоустойчивость. Узлов в кластере много (сотни или даже тысячи), и вероятность того, что они будут выходить из строя, довольно высока. Следует построить распределённую систему так, чтобы сбой на одном или нескольких узлах не влиял на её работу в целом.

Hadoop

Первой широко распространённой технологией хранения и обработки больших данных стал фреймворк Apache Hadoop. Это платформа с открытым программным кодом, разработанная под эгидой фонда Apache Software Foundation. По сути, Hadoop — это набор утилит и библиотек для работы с данными, распределёнными между несколькими кластерами, каждый из которых состоит из сотен или даже тысяч узлов.В основе экосистемы Hadoop лежит четыре модуля.Hadoop Common — набор библиотек и утилит, которые используются в других решениях, в частности для создания инфраструктуры и управления распределёнными файлами.HDFS — распределённая файловая система (Hadoop Distributed File System), отказоустойчивая и не требующая высокопроизводительного оборудования.Файл в системе делится на блоки, которые распределяются между узлами вычислительного кластера (DataNode). Данные файловой системы и информация о распределении блоков и об узлах данных, содержащих эти блоки, хранится на центральном узле имён (NameNode). HDFS надёжно хранит крупные файлы за счёт дублирования и репликации блоков.YARN (Yet Another Resource Negotiator) — система управления ресурсами, обеспечивающая безопасное планирование заданий и управление данными. Это набор программ, предоставляющих удобный интерфейс между аппаратными ресурсами кластера и приложениями, использующими эти ресурсы для вычислений и обработки данных.MapReduce — система распределённых вычислений для обработки больших данных.Вычисления происходят локально: обрабатывающая данные программа копируется на узлы с данными и выполняется там. В MapReduce входной набор данных разбивается на независимые блоки, а задание для их обработки — на подзадачи map и reduce.Подзадачи map — это применение функции к блоку данных. Эти подзадачи выполняются одновременно над разными блоками, а результаты записываются на диски с исходными данными. Подзадачи reduce — это агрегация результатов выполнения map с разных узлов.Пример задачи MapReduce — подсчёт числа вхождений каждого слова в тексте. Map определяют, какие слова и сколько раз входят в каждую строку. Reduce суммируют значения. Посмотрите в руководстве MapReduce, как решается эта задача.Классическая конфигурация кластера Hadoop состоит из сервера имён (NameNode), узла-мастера MapReduce (JobTracker) и набора узлов, на каждом из которых развёрнуты сервер данных (DataNode) и так называемый воркер (TaskTracker).Все операции в MapReduce подразумевают чтение с жёсткого диска и запись на него. Часто время, необходимое для этих операций, в разы превышает время самих вычислений. Поэтому технология MapReduce хорошо работает при распределённых вычислениях в пакетном режиме: когда данные подаются на обработку отдельными большими пакетами. А вот для обработки потоков данных в реальном времени она не подходит. Для таких задач разработаны фреймворки распределённой потоковой обработки данных, наиболее популярный из них — это Apache Spark.Одно из основных отличий Spark от Hadoop заключается в том, что он хранит результаты промежуточных вычислений в памяти, не записывая их на диск. Это даёт большой прирост в производительности.В основе Spark лежит движок, управляющий планированием и оптимизацией выполнения заданий, а также работой с источником данных (HDFS, объектным хранилищем или БД). Поверх ядра работают библиотеки. Вот основные из них:

  • Spark SQL — чтобы запускать SQL-подобные команды в распределённых наборах данных;
  • MLlib — для машинного обучения;
  • Structured Streaming — для потоковой обработки данных в реальном времени;
  • GraphX — для задач с графами.

Spark и Hadoop используются для разных задач и дополняют друг друга.Hadoop подходит, чтобы:

  • обрабатывать большие наборы данных, когда объём даже промежуточных результатов вычислений превышает доступную память;
  • создавать инфраструктуру анализа данных при ограниченном бюджете (Spark требует много оперативной памяти, так что его использование более затратно);
  • решать задачи, если времени на них достаточно и не требуется немедленно получить результаты;
  • заниматься пакетной обработкой данных, выполнять много операций чтения с диска и записи на него (например, анализ исторических и архивных данных).

Spark подходит, когда:

  • нужно анализировать потоковые данные в реальном времени;
  • скорость решения задачи принципиально важна;
  • задачи включают много параллельных операций с использованием итерационных алгоритмов;
  • задачи связаны с машинным обучением.

Свежие комментарии

Подписка

Лучшие статьи


Fatal error: Uncaught Error: Call to a member function have_posts() on null in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php:380 Stack trace: #0 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/widget.php(257): fox56_blog_grid(NULL, Array) #1 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/register.php(33): include('/home/host18670...') #2 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/class-wp-widget.php(394): Wi_Widget_Latest_Posts->widget(Array, Array) #3 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/widgets.php(837): WP_Widget->display_callback(Array, Array) #4 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(417): dynamic_sidebar('sidebar') #5 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(136): fox56_single_sidebar() #6 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(7): fox56_single_inner() #7 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/single.php(23): fox56_single() #8 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/template-loader.php(106): include('/home/host18670...') #9 /home/host1867038/the-devops.ru/htdocs/www/wp-blog-header.php(19): require_once('/home/host18670...') #10 /home/host1867038/the-devops.ru/htdocs/www/index.php(17): require('/home/host18670...') #11 {main} thrown in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php on line 380