Spark vs Hadoop: какая платформа для больших данных лучшая?



В этом сообщении в блоге говорится о apache spark и hadoop. Это даст вам представление о том, какой фреймворк для больших данных лучше выбрать в различных сценариях.

Я начну этот блог Apache Spark vs Hadoop, сначала представив Hadoop и Spark, чтобы установить правильный контекст для обеих сред. Затем, забегая вперед, мы сравним обе структуры больших данных по различным параметрам, чтобы проанализировать их сильные и слабые стороны.Но каким бы ни был результат нашего сравнения, вы должны знать, что и Spark, и Hadoop являются важными компонентами .

Apache Spark против Hadoop: введение в Hadoop

Hadoop - это структура, которая позволяет вам сначала хранить большие данные в распределенной среде, чтобы вы могли обрабатывать их параллельно. В основном Hadoop состоит из двух компонентов:





HDFS

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

Имя Узел

Это главный демон, который поддерживает и управляет DataNodes (подчиненными узлами). Он записывает метаданные всех файлов, хранящихся в кластере, например расположение хранимых блоков, размер файлов, разрешения, иерархия и т. д. Он записывает каждое изменение, происходящее в метаданных файловой системы.



Например, если файл удален в HDFS, NameNode немедленно запишет это в EditLog. Он регулярно получает Heartbeat и отчет о блоке от всех DataNodes в кластере, чтобы гарантировать, что DataNodes активны. Он ведет учет всех блоков в HDFS и узлов, в которых эти блоки хранятся.

DataNode

Это подчиненные демоны, которые работают на каждой подчиненной машине. Фактические данные хранятся на DataNodes. Они отвечают за обслуживание запросов чтения и записи от клиентов. Они также несут ответственность за создание блоков, удаление блоков и их репликацию в зависимости от решений, принятых NameNode.

HDFS - Apache Spark против Hadoop - EdurekaПРЯЖА

YARN выполняет все ваши действия по обработке, распределяя ресурсы и планируя задачи. У него есть два основных демона, т.е. ResourceManager и NodeManager .



ResourceManager

Это компонент уровня кластера (по одному для каждого кластера), работающий на главном компьютере. Он управляет ресурсами и планирует работу приложений поверх YARN.

NodeManager

Это компонент уровня узла (по одному на каждом узле) и работает на каждой ведомой машине. Он отвечает за управление контейнерами и мониторинг использования ресурсов в каждом контейнере. Он также отслеживает состояние узлов и управление журналами. Он постоянно связывается с ResourceManager, чтобы оставаться в курсе последних событий. Итак, вы можете выполнять параллельную обработку HDFS с помощью MapReduce.

Пример кода Python для логистической регрессии

Чтобы узнать больше о Hadoop, вы можете пройти это блог. Теперь, когда мы готовы познакомиться с Hadoop, давайте перейдем к введению Spark.

Apache Spark против Hadoop: введение в Apache Spark

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

Устойчивый распределенный набор данных (RDD) - это фундаментальная структура данных Spark. Это неизменяемая распределенная коллекция объектов. Каждый набор данных в RDD разделен на логические разделы, которые могут быть вычислены на разных узлах кластера. СДР могут содержать любой тип объектов Python, Java или Scala, включая определяемые пользователем классы. Компоненты Spark делают его быстрым и надежным. Apache Spark состоит из следующих компонентов:

  1. Искровое ядро - Spark Core - базовый движок для крупномасштабной параллельной и распределенной обработки данных. Кроме того, дополнительные библиотеки, построенные на основе ядра, позволяют выполнять различные рабочие нагрузки для потоковой передачи, SQL и машинного обучения. Он отвечает за управление памятью и восстановление после сбоев, планирование, распределение и мониторинг заданий в кластере и взаимодействие с системами хранения.
  2. Spark Streaming - Spark Streaming - это компонент Spark, который используется для обработки потоковых данных в реальном времени. Таким образом, это полезное дополнение к основному API Spark. Он обеспечивает высокопроизводительную и отказоустойчивую потоковую обработку потоков данных в реальном времени.
  3. Spark SQL : Spark SQL - это новый модуль в Spark, который объединяет реляционную обработку с API функционального программирования Spark. Он поддерживает запросы данных через SQL или через язык запросов Hive. Для тех из вас, кто знаком с СУБД, Spark SQL станет легким переходом от предыдущих инструментов, позволяющих расширить границы традиционной обработки реляционных данных.
  4. GraphX : GraphX ​​- это Spark API для графов и вычислений, параллельных графам. Таким образом, он расширяет Spark RDD с помощью гибкого распределенного графа свойств. На высоком уровне GraphX ​​расширяет абстракцию Spark RDD, вводя устойчивый распределенный граф свойств: ориентированный мультиграф со свойствами, прикрепленными к каждой вершине и ребру.
  5. MLlib (Машинное обучение): MLlib означает библиотеку машинного обучения. Spark MLlib используется для машинного обучения в Apache Spark.

Как видите, Spark поставляется с высокоуровневыми библиотеками, включая поддержку R, SQL, Python, Scala, Java и т. Д. Эти стандартные библиотеки повышают бесшовную интеграцию в сложный рабочий процесс. Помимо этого, он также позволяет интегрировать с ним различные наборы сервисов, такие как MLlib, GraphX, SQL + Data Frames, потоковые сервисы и т. Д., Чтобы расширить его возможности.

Чтобы узнать больше об Apache Spark, вы можете пройти через это блог. Теперь все готово для Apache Spark vs Hadoop. Давайте продвинемся вперед и сравним Apache Spark и Hadoop по различным параметрам, чтобы понять их сильные стороны.

Apache Spark против Hadoop: параметры для сравнения

Спектакль

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

Изначально Hadoop был настроен для непрерывного сбора данных из нескольких источников, не беспокоясь о типе данных и хранении их в распределенной среде. MapReduce использует пакетную обработку. MapReduce никогда не создавался для обработки в реальном времени, основная идея YARN - параллельная обработка распределенного набора данных.

Проблема с их сравнением в том, что они выполняют обработку по-разному.

Легкость использования

Spark поставляется с удобными API для Scala, Java, Python и Spark SQL. Spark SQL очень похож на SQL, поэтому разработчикам SQL становится проще его изучить. Spark также предоставляет разработчикам интерактивную оболочку для запросов и выполнения других действий и немедленной обратной связи.

Вы можете легко принимать данные в Hadoop, используя оболочку или интегрируя ее с несколькими инструментами, такими как Sqoop, Flume и т. Д. YARN - это просто среда обработки, и ее можно интегрировать с несколькими инструментами, такими как Hive и Pig. HIVE - это компонент хранилища данных, который выполняет чтение, запись и управление большими наборами данных в распределенной среде с использованием интерфейса, подобного SQL. Вы можете пройти через это Экосистема Hadoop блог, чтобы узнать о различных инструментах, которые можно интегрировать с Hadoop.

Расходы

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

Теперь вам может быть интересно, чем они отличаются. Хранение и обработка данных в Hadoop основаны на дисках, и Hadoop использует стандартные объемы памяти. Итак, с Hadoop нам нужно много дискового пространства, а также более быстрые диски. Hadoop также требует нескольких систем для распределения дискового ввода-вывода.

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

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

Обработка данных

Существует два типа обработки данных: пакетная обработка и потоковая обработка.

Пакетная обработка против потоковой обработки

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

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

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

как запустить атомный питон

Теперь, возвращаясь к Apache Spark и Hadoop, YARN - это в основном фреймворк для пакетной обработки. Когда мы отправляем задание в YARN, он считывает данные из кластера, выполняет операцию и записывает результаты обратно в кластер. Затем он снова считывает обновленные данные, выполняет следующую операцию и записывает результаты обратно в кластер и так далее.

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

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

И Hadoop, и Spark обеспечивают отказоустойчивость, но у них разные подходы. И для HDFS, и для YARN главные демоны (то есть NameNode и ResourceManager соответственно) проверяют пульс подчиненных демонов (то есть DataNode и NodeManager соответственно). Если какой-либо подчиненный демон выходит из строя, главные демоны переносят все ожидающие и выполняющиеся операции на другое подчиненное устройство. Этот метод эффективен, но он также может значительно увеличить время выполнения операций с единичным отказом. Поскольку Hadoop использует стандартное оборудование, HDFS обеспечивает отказоустойчивость еще одним способом - репликацией данных.

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

СДР могут сохранять набор данных в памяти между операциями, что значительно ускоряет дальнейшие действия в 10 раз. Если RDD утерян, он будет автоматически пересчитан с использованием исходных преобразований. Именно так Spark обеспечивает отказоустойчивость.

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

Hadoop поддерживает Kerberos для аутентификации, но с этим сложно справиться. Тем не менее, он также поддерживает аутентификацию сторонних производителей, таких как LDAP (Lightweight Directory Access Protocol). Они также предлагают шифрование. HDFS поддерживает традиционные права доступа к файлам, а также списки управления доступом (ACL). Hadoop обеспечивает авторизацию на уровне обслуживания, которая гарантирует, что у клиентов есть необходимые разрешения для отправки заданий.

В настоящее время Spark поддерживает аутентификацию с использованием общего секрета. Spark может интегрироваться с HDFS и может использовать списки управления доступом HDFS и разрешения на уровне файлов. Spark также может работать на YARN, используя возможности Kerberos.

Сценарии использования, в которых лучше всего подходит Hadoop:

  • Анализ архивных данных. YARN позволяет параллельно обрабатывать огромные объемы данных. Части данных обрабатываются параллельно и отдельно на разных узлах данных и собираются в результате каждого NodeManager.
  • Если моментальные результаты не требуются. Hadoop MapReduce - хорошее и экономичное решение для пакетной обработки.

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

Анализ больших данных в реальном времени:

Анализ данных в реальном времени означает обработку данных, генерируемых потоками событий в реальном времени, поступающих со скоростью миллионы событий в секунду, например, данные Twitter. Сила Spark заключается в его способности поддерживать потоковую передачу данных наряду с распределенной обработкой. Это полезная комбинация, которая обеспечивает обработку данных почти в реальном времени. MapReduce лишен такого преимущества, поскольку он был разработан для выполнения пакетной и распределенной обработки больших объемов данных. Данные в реальном времени все еще можно обрабатывать на MapReduce, но его скорость далека от скорости Spark.

Spark утверждает, что обрабатывает данные в 100 раз быстрее, чем MapReduce, и в 10 раз быстрее с дисками.

Обработка графика:

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

Кроме того, для передачи сообщений требуются оценки соседних узлов, чтобы оценить оценку конкретного узла. Для этих вычислений требуются сообщения от его соседей (или данные на нескольких этапах работы), механизма, которого нет в MapReduce. Различные инструменты обработки графов, такие как Pregel и GraphLab, были разработаны для удовлетворения потребности в эффективной платформе для алгоритмов обработки графов. Эти инструменты быстры и масштабируемы, но неэффективны для создания и постобработки этих сложных многоступенчатых алгоритмов.

Введение Apache Spark в значительной степени решило эти проблемы. Spark содержит библиотеку вычислений графиков под названием GraphX, которая упрощает нашу жизнь. Вычисления в памяти вместе с поддержкой встроенных графов улучшают производительность алгоритма на один или два градуса по сравнению с традиционными программами MapReduce. Spark использует комбинацию Netty и Akka для распределения сообщений по исполнителям. Давайте посмотрим на некоторые статистические данные, которые отражают эффективность алгоритма PageRank с использованием Hadoop и Spark.

Алгоритмы итеративного машинного обучения:

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

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

  • Быстрая обработка данных. Как мы знаем, Spark допускает обработку в памяти. В результате Spark работает до 100 раз быстрее для данных в ОЗУ и до 10 раз для данных в хранилище.
  • Итерационная обработка. RDD Spark позволяют выполнять несколько операций карты в памяти, без необходимости записывать промежуточные наборы данных на диск.
  • Обработка почти в реальном времени. Spark - отличный инструмент для немедленного получения бизнес-информации. Это причина, по которой Spark используется в потоковой системе кредитных карт.

«Apache Spark: убийца или спаситель Apache Hadoop?»

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

Есть вопрос к нам? Пожалуйста, укажите это в разделе комментариев, и мы свяжемся с вами в ближайшее время.

Если вы хотите изучить Spark и построить карьеру в области Spark для выполнения крупномасштабной обработки данных с использованием RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​и Scala с примерами использования в реальной жизни, ознакомьтесь с нашими интерактивными интерактивными онлайн-версиями. Вот, который поставляется с круглосуточной поддержкой, которая поможет вам на протяжении всего периода обучения.