PySpark для начинающих

Введение в Spark с Python: подробное объяснение архитектуры Spark и компонентов

Объяснение Spark для начинающих - ELI5

Обзор

В этой статье мы обсудим архитектуру фреймворка Hadoop и ограничения MapReduce при обработке больших данных, которые выступают в качестве мотивации для разработки фреймворка Apache Spark. После этого мы обсудим различные компоненты Spark и его архитектуру и, наконец, взглянем на PySpark API.

Table of contents:
1. Big Data and the Emergence of Hadoop Framework.
2. Brief overview of the Hadoop Architecture.
3. Working of MapReduce and its Limitations.
4. Introduction to Apache Spark
5. Components of Apache Spark
6. Architecture of Apache Spark
7. Comparing Hadoop with Spark 
8. Overview of PySpark API 

В этой статье будет предоставлено подробное объяснение компонентов Apache Spark и архитектуры Spark, а также рабочего процесса. Этот блог - первый из серии статей об Apache Spark (PySpark).

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

Вступление

Данные - это новая нефть - самая популярная фраза, подчеркивающая важность данных [1]. Объем данных, которые мы генерируем каждую минуту дня, поистине ошеломляет. Согласно Forbes, мы генерируем 2,5 квинтиллиона байт данных каждый день в наших текущих темпах, но эти темпы только увеличиваются с более глубоким проникновением смартфонов и ростом Интернета вещей (IoT) [2].

Вот некоторые цифры из Forbes [2]:

  • Ожидается, что к 2025 году объем данных, генерируемых каждый день, во всем мире достигнет 463 эксабайт.
  • Google, Facebook, Microsoft и Amazon хранят не менее 1200 петабайт информации.
  • Мир тратит почти 1 миллион долларов в минуту на товары в Интернете.
  • Electronic Arts обрабатывает около 50 терабайт данных каждый день.
  • К 2025 году в мире будет 75 миллиардов устройств Интернета вещей (IoT).
  • К 2030 году девять из каждых десяти человек в возрасте шести лет и старше будут активными в цифровой среде.

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

Основные проблемы с большими данными:

  • Хранение и управление огромными объемами данных.
  • Эффективная обработка данных и получение ценной бизнес-информации с меньшими затратами времени.

Эти проблемы привели к созданию инфраструктуры Hadoop.

Hadoop Framework

В этом разделе мы кратко обсудим различные компоненты инфраструктуры Hadoop и то, как их можно использовать для обработки огромных объемов данных для извлечения информации из данных.

Apache Hadoop - это платформа, которая позволяет выполнять распределенную обработку больших наборов данных на кластерах компьютеров.

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

Hadoop состоит из трех основных компонентов:

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

Архитектура Hadoop

Hadoop работает по концепции архитектуры ведущий / ведомый (или рабочий) для хранения данных и распределенной обработки данных.

В этой архитектуре у нас есть один главный узел и несколько рабочих (или подчиненных) узлов. Главный узел назначает различные функции рабочим узлам и управляет ресурсами. Рабочие узлы выполняют фактические вычисления и хранят реальные данные, тогда как на главном узле у нас есть метаданные. Это означает, что главный узел хранит информацию о данных.

Диспетчер ресурсов в главном и диспетчер узлов в подчиненных узлах являются частью структуры YARN. Менеджер ресурсов отслеживает отчеты об использовании ресурсов от менеджеров узлов для каждой задачи.

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

Уменьшение карты

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

Каждое задание в MapReduce обычно разбивает входные данные на несколько дискретных фрагментов, которые должны обрабатываться задачами карты параллельно. Выходные данные фазы сопоставления агрегируются, суммируются или преобразуются этапом сокращения для получения желаемого результата . Фреймворк заботится о планировании задач, отслеживании их и повторном выполнении невыполненных задач.

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

Ограничения в MapReduce

Некоторые из основных недостатков MapReduce перечислены ниже:

Ввод / вывод данных

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

Без обработки в реальном времени

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

Apache Spark

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

Spark можно рассматривать как расширенную версию MapReduce. В отличие от MapReduce, Spark не хранит промежуточные данные на дисках. Он хранит промежуточные данные в электронном виде в ОЗУ. Поскольку вся обработка данных происходит в памяти, Spark предлагает более быстрый способ обработки больших объемов данных.

  • Spark разработан в AMPLab Калифорнийского университета в Беркли в 2009 году, а в 2010 году его исходный код открыт по лицензии BSD. Позже он был передан в дар Apache Software Foundation в 2013 году, теперь Apache Spark стал механизмом обработки больших данных верхнего уровня.
  • На сегодняшний день это самая надежная и широко используемая платформа обработки больших данных в отрасли.
  • Технологические гиганты, такие как Netflix, Yahoo и eBay, развернули Spark в массовом масштабе, коллективно обрабатывая несколько петабайт данных в кластерах из более чем 8000 узлов.

Особенности Spark

Расчет скорости

  • Spark может запускать приложение в 100 раз быстрее, чем Hadoop, для крупномасштабной обработки данных и в 10 раз быстрее при работе на диске за счет вычислений в памяти.
  • Это возможно из-за меньшего количества операций чтения / записи на диск, в отличие от MapReduce.
  • Spark хранит промежуточные данные в памяти. Он использует больше оперативной памяти вместо ввода-вывода сети и физического хранилища. Его можно использовать для обработки данных в реальном или близком к реальному времени.

Простота использования

  • Spark написан на Scala и предоставляет API для работы со Scala, Java, Python, R и SQL. Spark позволяет разработчикам создавать параллельные приложения на выбранном языке.

Расширенная аналитика

  • Помимо операций MapReduce, Spark поддерживает запросы SQL, потоковую передачу данных, машинное обучение и обработку графиков.

Несколько источников данных

  • Spark может читать / писать в любой формат хранения, который может поддерживать Hadoop Framework, например HDFS, S3, HBase, Cassandra, Avro и т. Д.
  • Вы также можете запустить Spark, используя его автономный кластер, в EC2, Hadoop YARN, в Mesos или в Kubernetes, Apache Hive и других источниках данных.

Компоненты Spark

В этом разделе мы кратко обсудим различные компоненты Apache Spark.

  • SparkCore API. Spark Core - это основной механизм выполнения для платформы Spark, на котором построены все остальные функции. Ядро Spark обеспечивает отказоустойчивость, вычисления в памяти, управление ресурсами и ссылки на внешние источники данных. Он также предоставляет структуру распределенного выполнения для поддержки широкого спектра языков программирования, таких как Python, Java, Scala, для простоты разработки.
  • Spark SQL - Spark SQL - это модуль для работы со структурированными данными. Spark SQL можно использовать для запроса структурированных данных внутри программ Spark. Он поддерживает Java, Python, R и SQL. Spark SQL можно интегрировать с различными источниками данных, включая Hive, Avro, Parquet, JSON и JDBC. Spark SQL также поддерживает синтаксис HiveQL, позволяющий получить доступ к существующим хранилищам Hive.

  • Потоковая передача Spark - потоковая передача Spark использует Spark Core API для выполнения интерактивной аналитики данных в реальном времени, используя готовую семантику отказоустойчивости Spark. Потоковая передача Spark может быть интегрирована с широким спектром популярных источников данных, таких как HDFS, Flume, Kafka и Twitter.
  • Spark MLib. MLib - это масштабируемая библиотека машинного обучения, построенная на основе Spark Core API, которая предоставляет высококачественные алгоритмы. MLib можно использовать с любыми данными Hadoop, такими как HDFS, HBase или локальное хранилище, что упрощает подключение к рабочим процессам Hadoop. Библиотеку можно использовать в Java, Scala и Python как часть приложений Spark.
  • GraphX ​​- GraphX ​​- это Spark API для построения графиков и выполнения вычислений, параллельных графам. GraphX ​​позволяет пользователям интерактивно создавать и масштабировать данные с графической структурой.

Архитектура Spark

Spark следует архитектуре ведущий / ведомый (рабочий), аналогичной структуре Hadoop, где ведущее устройство является драйвером, а ведомые устройства - рабочими. Это кластерная система, состоящая из ведущего и нескольких ведомых устройств.

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

  • Программа драйвера Spark разбивает большие входные данные на небольшие фрагменты данных (обычно размер раздела составляет 64, 128 или 256 МБ) и распределяет их по нескольким рабочим узлам для выполнения задачи с этими данными.
  • SparkContext разбивает задание на несколько задач, которые распределяются между рабочими узлами. Затем задачи выполняются отдельными рабочими узлами (или подчиненными узлами) и управляются программой драйвера через SparkContext на главном узле.
  • Задача рабочих узлов - выполнять эти задачи и сообщать водителю о состоянии каждой задачи. Количество задач одновременно будет равно количеству разделов.
  • SparkContext работает с диспетчером кластера для управления различными заданиями. Менеджер кластера выделяет ресурсы (например, ЦП, память) рабочим узлам, на которых выполняются задачи. Диспетчер кластеров Spark может использовать автономный диспетчер кластеров или Apache Mesos, или Hadoop YARN, или Kubernetes для распределения ресурсов.

Внутренний рабочий процесс Spark

  1. При отправке кода приложения Spark программа драйвера в главном узле инициализирует SparkContext и неявно преобразует код Spark, содержащий преобразования и действия, в DAG, направленный ациклический граф. DAG - это граф, который выполняет последовательность вычислений над данными.
  2. Программа драйвера выполняет оптимизацию и преобразует DAG в план физического выполнения со многими задачами, то есть… Программа драйвера решает, какие задачи будут выполняться на каждом рабочем узле, и планирует работу между рабочими узлами.
  3. Как только программа привода выполняет распределение работы, она согласовывает с менеджером кластера ресурсы для рабочих узлов. Затем диспетчер кластера запускает исполнителей на рабочих узлах от имени драйвера.
  4. Перед тем, как исполнители начинают выполнение, они регистрируются в программе драйвера, чтобы драйвер имел целостное представление обо всех исполнителях. Исполнители сообщают водителю о состоянии каждой задачи.

Spark против Hadoop?

  • Spark конкурирует с MapReduce, а не со всей инфраструктурой Hadoop.
  • Spark не имеет собственной распределенной файловой системы, но может использовать HDFS в качестве основного хранилища.
  • Spark может работать поверх Hadoop, получает преимущества от диспетчера кластеров Hadoop (YARN) и базового хранилища (HDFS, HBase и т. Д.).

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

PySpark API

PySpark - это Python API, написанный на Python для поддержки Spark.

Python - один из наиболее широко используемых языков программирования, особенно для науки о данных, и его легче выучить по сравнению с другими языками программирования. Многие практики уже знакомы с преобразованиями и манипуляциями с данными Python Pandas для извлечения информации из данных. При сильной поддержке сообщества разработчиков ПО с открытым исходным кодом PySpark был разработан с использованием библиотеки Py4j.

Преимущества использования PySpark:

  • Python очень прост в изучении и реализации и предоставляет простой и всеобъемлющий API.
  • PySpark Предоставляет интерактивную оболочку для анализа данных в распределенной среде.
  • С Python читаемость кода, обслуживание и знакомство намного лучше.
  • Он предлагает различные варианты визуализации данных, что затруднительно при использовании Scala или Java.

Заключение

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

Не стесняйтесь обращаться ко мне через LinkedIn или Twitter, если у вас есть какие-либо сомнения в понимании концепций. Я надеюсь, что эта статья помогла вам разобраться в компонентах Spark и архитектуре Spark.

В моем следующем блоге мы обсудим, как настроить PySpark на вашем локальном компьютере и начать работу с PySpark Hands-on. Поэтому убедитесь, что вы подписаны на меня на Medium, чтобы получать уведомления, как только он упадет.

До следующего раза Мир :)

NK.

Ссылки:

[1] Данные - новая нефть цифровой экономики

[2] Сколько данных мы создаем каждый день? Потрясающая статистика, которую должен прочитать каждый

[3] Подробное объяснение архитектуры Apache Spark