Комплект разработчика

Хадуп против Спарка

Какая разница?

вступление

Данные — это новая нефть. Мы слышим это все время в эти дни. Но правда это или нет, мы знаем реальную ценность обработки данных. Каждый год мы видим, как появляются новые инструменты, созданные именно для этой цели. Из них Apache Hadoop и Apache Spark кажутся наиболее популярными. Но какой из них вы должны использовать? И что лучше всего использовать для обработки данных о посещениях или для создания прогнозного моделирования машинного обучения? Можно ли их использовать вместе? Каковы плюсы и минусы каждого? В этой статье мы попытаемся ответить на все эти вопросы, рассмотрев эти два инструмента с нескольких точек зрения.

Что такое Хадуп?

Apache Hadoop — это проект, созданный Yahoo в 2006 году, который позже стал проектом верхнего уровня Apache с открытым исходным кодом. Библиотека программного обеспечения Apache Hadoop — это платформа, которая позволяет распределенную обработку больших наборов данных в кластерах компьютеров с использованием простых моделей программирования. Он использует MapReduce для разделения данных на блоки и назначения фрагментов узлам в кластере. Позже данные сохраняются, обрабатываются параллельно на каждом узле для получения вывода.

Hadoop состоит из нескольких компонентов:

  • Распределенная файловая система Hadoop (HDFS), которая позволяет хранить файлы в родном для Hadoop формате и благодаря распараллеливанию предоставляет множество возможностей для масштабирования.
  • YARN, планировщик, координирующий приложения во время выполнения.
  • MapReduce — алгоритм, отвечающий за параллельную обработку данных.
  • Hadoop Common, набор общих библиотек, поддерживающих другие модули.

Кроме того, Hadoop также включает в себя:

  • Sqoop, ответственный за перемещение реляционных данных в HDFS,
  • Hive — SQL-подобный интерфейс, помогающий писать и выполнять запросы к HDFS.
  • Mahout, обеспечивающий реализацию некоторых алгоритмов машинного обучения.

Hadoop изначально использует Java. К счастью, в настоящее время вы можете найти клиентские приложения, написанные не на Java, а на других языках. Благодаря этому вы сможете легко адаптировать Hadoop к своим проектам.

Что такое Искра?

Apache Spark, который, как и Apache Hadoop, также является инструментом с открытым исходным кодом, представляет собой платформу, которая может работать в автономном режиме, в облаке или Apache Mesos. Он предназначен для быстрой работы и использует оперативную память (в памяти) для своих операций.

В то время как Hadoop записывает и считывает данные из HDFS, Spark делает это с оперативной памятью, используя концепцию, известную как отказоустойчивый распределенный набор данных.

Spark состоит из пяти основных компонентов:

  • Его ядро, представляющее собой общую библиотеку для проекта, содержащую такие функции, как диспетчеризация задач, планирование, операции ввода-вывода и т. д.,
  • Spark Streaming, который позволяет обрабатывать поток данных в реальном времени из многих источников,
  • MLib — библиотека, содержащая алгоритмы машинного обучения.
  • GraphX ​​— набор API, используемых для анализа графов.
  • SparkSQL — компонент, позволяющий запускать SQL-подобные команды в распределенных наборах данных.

Несмотря на то, что интерфейс Spark был написан на Scala, вы также можете писать задания Spark, используя другие языки. Интеграция с такими библиотеками, как PyTorch или TensorFlow, также довольно проста.

Сравнение

Архитектура

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

Эта информация передается в NameNode — узел, отвечающий за отслеживание того, что происходит в кластере. NameNode назначает файлы нескольким узлам данных, на которые они затем записываются.

Когда приложение реализовано на одном из поддерживаемых языков, то JobTracker, происходящий от MapReduce, отвечает за его подбор и распределение работы между TaskTrackers, прослушивая другие узлы.

Позже YARN выделяет ресурсы, которые раскручивает JobTracker, и отслеживает все результаты этапа обработки MapReduce, которые затем агрегируются и записываются обратно на диск в HDFS.

Принцип работы Spark аналогичен работе Hadoop. Ключевое отличие заключается в том, что Spark хранит данные и операции в памяти до тех пор, пока пользователь не сохранит их. Spark извлекает данные из своего источника (например, HDFS, S3 или что-то еще) в SparkContext. Spark также создает устойчивый распределенный набор данных, который содержит неизменяемую коллекцию элементов, с которыми можно работать параллельно.

Мало того, Spark также создает прямой ациклический график для визуализации всех шагов и взаимосвязей между ними.

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

Начиная с SPark 2.0, пользователи могут использовать DataFrames, которые похожи на RDD, но помещают данные в именованные столбцы. Это делает их более удобными для пользователя. Благодаря SparkSQL пользователи могут запрашивать кадры данных, используя синтаксис, аналогичный собственному SQL.

Представление

Хотя может показаться нелогичным рассматривать оба инструмента, сравнивать их производительность и то, как они обрабатывают данные, мы все же можем выбрать более быстрый вариант. Hadoop повышает свою производительность за счет доступа к данным, хранящимся в HDFS. Однако это все еще не может конкурировать с обработкой в ​​памяти Spark, поскольку было обнаружено, что Spark работает в 100 раз быстрее при использовании ОЗУ и в 10 раз быстрее на диске.

Как показывают исследования, [1] [2] [3] Spark работал в 3 раза быстрее и требовал в 10 раз меньше узлов для обработки 100 ТБ данных в HDFS. Также было обнаружено, что Spark работает быстрее с приложениями машинного обучения, такими как Naive Bayes и k-means.

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

Все эти аргументы ставят Spark в лидеры. Тем не менее, если размер данных превышает объем доступной оперативной памяти или если Spark работает на YARN с другими общими службами, его производительность может ухудшиться и привести к утечке служебной памяти. В этом случае Hadoop будет более логичным выбором.

Расходы

Сравнивая стоимость Spark и Hadoop, мы должны смотреть на более широкую картину. Оба инструмента с открытым исходным кодом и бесплатны. Кроме того, нам все еще нужно учитывать затраты на разработку, обслуживание и инфраструктуру. Общее эмпирическое правило для локальных установок заключается в том, что для Hadoop требуется больше памяти на диске, а для Spark требуется больше оперативной памяти, а это означает, что настройка кластеров Spark может быть более дорогостоящей. Кроме того, поскольку Spark является более новой системой, специалисты по ней встречаются реже и, следовательно, стоят дороже. Другой вариант — установить их с помощью поставщика, такого как Cloudera для Hadoop или DataBricks для Spark, или запустить процессы EMR/MapReduce в облаке с помощью AWS.

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

Отказоустойчивость

Если говорить об отказоустойчивости, то оба решения обеспечивают достойный уровень обработки сбоев.

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

С той же целью Spark использует RDD. Он состоит из линии, которая помнит, как был создан набор данных, и, поскольку он неизменяем, может перестроить его с нуля, используя отслеживание рабочего процесса с помощью DAG.

Безопасность

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

Хотя оба инструмента могут полагаться на аутентификацию Kerberos, контроль безопасности Hadoop для HDFS гораздо более детальный. Другой проект, также доступный для изменения уровней безопасности HDFS, — Apache Sentry.

Машинное обучение

Поскольку машинное обучение — это процесс, в котором вычисления в памяти работают лучше всего, Spark должен быть здесь очевидным выбором, поскольку он быстрее. Для этого у него есть MLLib, который доступен в Scala, Java, R и Python. Библиотека содержит алгоритмы регрессии и классификации, а также позволяет создавать собственные конвейеры машинного обучения.

Например, Hadoop MapReduce разбивает задания на параллельные задачи, которые могут быть слишком большими для алгоритмов машинного обучения. Этот процесс создает проблемы с производительностью ввода-вывода в этих приложениях Hadoop. Mahoot также является основной библиотекой для машинного обучения в кластерах Hadoop. Он основан на MapReduce для выполнения всех необходимых операций. Это постепенно меняется на Samsara, который представляет собой DSL (со Scala под капотом), предназначенный для написания ваших собственных решений ML.

Масштабируемость

В этой категории у нас нет победителей. Hadoop использует HDFS для обработки огромного объема данных. Если он будет расти, то Hadoop сможет адаптироваться и масштабироваться по мере необходимости. Spark полагается на HDFS, когда данные слишком велики для обработки. Новые кластеры могут расширяться и добавлять все больше и больше мощности, в конечном итоге они могут иметь тысячи узлов, и ограничений нет.

Планирование и управление ресурсами

Для планирования ресурсов Hadoop использует внешние инструменты, поскольку не имеет собственного решения. Например, YARN может использовать NodeManager или ResourceManager для управления планированием в кластере Hadoop. Еще один инструмент для планирования рабочих процессов — Oozie.

YARN отвечает только за выделение доступной вычислительной мощности.

Кроме того, Hadoop MapReduce совместим с такими подключаемыми модулями, как FairScheduler или CapacityScheduler. Они пытаются выделить важные ресурсы для поддержания эффективности кластера.

Spark изначально содержит эти функции. Планировщик DAG управляет разделением операторов на этапы. На каждом этапе есть множество задач, которые запланированы DAG, а Spark должен выполнить.

Spark Scheduler и Block Manager выполняют планирование заданий и задач, мониторинг и распределение ресурсов в кластере.

Варианты использования: когда использовать Hadoop и когда использовать Spark

Ниже вы можете найти некоторые распространенные варианты использования обоих инструментов.

Варианты использования Hadoop

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

Отрасли и компании, использующие Hadoop:

  • Социальные сети (Фейсбук, Твиттер)
  • Розничная торговля/электронная коммерция. (Алибаба, eBay)
  • Доставка видео. (Хулу)
  • Игры. (ИМВУ, Гевинншпиле)
  • Музыка онлайн (Last.fm, Spotify)
  • И многое другое.

Примеры использования искры

С помощью Spark мы можем определить следующие варианты использования, в которых он превосходит Hadoop:

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

Отрасли и компании, использующие Spark:

  • Образование (Калифорнийский университет в Беркли)
  • Розничная торговля/электронная коммерция. (Alibaba, eBay, Groupon)
  • Аналитика данных (4Quant)
  • Операции. (Сокол)
  • Фитнес (MyFitnessPal)
  • И многое другое.

Когда использовать Hadoop и Spark

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

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

  • потоковой передачи огромных объемов данных, которые необходимо сохранить.
  • создание сложных алгоритмов ML при сохранении некоторых результатов или вывода.
  • туманные вычисления.

Резюме

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

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

Ресурсы

  1. https://spark.apache.org/
  2. https://spark.apache.org/news/spark-wins-daytona-gray-sort-100tb-benchmark.html
  3. https://udspace.udel.edu/bitstream/handle/19716/17628/2015_LiuLu_MS.pdf
  4. https://logz.io/blog/hadoop-vs-spark/
  5. https://phoenixnap.com/kb/hadoop-vs-spark
  6. https://perfectial.com/blog/hadoop-vs-spark/
  7. https://www.dezyre.com/article/top-10-industries-using-big-data-and-121-companies-who-hire-hadoop-developers/69
  8. https://databricks.com/blog/2014/01/21/spark-and-hadoop.html
  9. https://spark.apache.org/powered-by.html

Читать далее

Первоначально опубликовано на https://scalac.io 15 февраля 2021 г.