Apache Spark — платформа обработки больших данных с открытым исходным кодом. Она популярна среди инженеров данных благодаря своей скорости, возможностях масштабируемости и простоте использования. Spark предназначен для работы с огромными наборами данных в распределенной вычислительной среде, что позволяет разработчикам создавать высокопроизводительные конвейеры данных, способные быстро обрабатывать огромные объемы данных.
Делимся переводом обзорной статьи о том, что такое Apache Spark и как он может помочь в data-engineering.
Что такое Apache Spark и как он может помочь в Data-Engineering?
Apache Spark - это распределенное вычислительное решение общего назначения для обработки огромных массивов данных. Он был создан в Калифорнийском университете в Беркли и с тех пор стал одним из самых известных в отрасли фреймворков для обработки больших данных. Spark предназначен для работы с широким спектром источников данных, таких как Hadoop Distributed File System (HDFS), Apache Cassandra, Apache HBase и Amazon S3.
Ниже приведены основные преимущества использования Spark для обработки данных:
Скорость
Spark позволяет анализировать большие массивы данных с бешеной скоростью за счет использования вычислений в памяти и методов разделения данных.
Масштабируемость
Поскольку Spark может горизонтально расти по кластеру узлов, он способен обрабатывать огромные массивы данных без ущерба для производительности.
Простота использования
Spark предлагает интуитивно понятный и удобный интерфейс для построения конвейеров данных, позволяя разработчикам легко создавать сложные рабочие процессы обработки данных.
Гибкость
Spark предлагает широкий спектр источников данных и действий по их обработке, что позволяет разработчикам создавать уникальные конвейеры данных, отвечающие их индивидуальным требованиям.
Архитектура Spark и ее компоненты
В архитектуре Spark "мастер-рабочий" главный узел отвечает за управление всем кластером Spark. Он распределяет ресурсы между различными приложениями и распределяет данные по рабочим узлам. Главный узел также управляет механизмом отказоустойчивости и отслеживает состояние рабочих узлов.
Рабочие узлы, в свою очередь, отвечают за выполнение задач, делегированных им главным узлом. Каждый рабочий узел обладает собственным набором ресурсов, включая процессор, память и хранилище, и может выполнять одну или несколько задач одновременно. Когда главный узел поручает задание рабочему узлу, он также предоставляет ему соответствующие данные для обработки.
Менеджер кластера контролирует распределение ресурсов различным приложениям, работающим в кластере, и взаимодействует с главным узлом и рабочими узлами.
Spark Core, Spark SQL, Spark Streaming и MLlib — четыре основных компонента архитектуры Spark.
Spark Core
Spark Core является основой платформы и предоставляет необходимые возможности для распределенной обработки данных. Он предоставляет API RDD (Resilient Distributed Dataset) для распределенной обработки данных, планировщик задач для параллелизма и систему управления памятью in-memory.
Spark SQL
Spark SQL — это пакет, предоставляющий SQL-подобный интерфейс для работы со структурированными и полуструктурированными данными. Он позволяет разработчикам выполнять SQL-запросы к данным, хранящимся в различных источниках данных, таких как HDFS, Apache Cassandra и Apache HBase.
Spark Streaming
Spark Streaming — это модуль, который позволяет обрабатывать потоковые данные в режиме реального времени небольшими пакетами. Это делает его идеальным для обработки данных от датчиков, социальных сетей и других источников.
MLlib
MLlib — это пакет обработки данных, поддерживающий методы машинного обучения. Он включает в себя множество алгоритмов, таких как кластеризация, классификация, регрессия и совместная фильтрация.
Режимы деплоя Spark
Spark может быть развернут в трех основных режимах:
Локальный режим. Spark работает в одной системе в локальном режиме, используя все доступные ядра. При работе с небольшими наборами данных этот режим идеально подходит для тестирования и разработки.
Автономный режим. В автономном режиме Spark работает на кластере компьютеров, один из которых служит главным узлом, а другие — рабочими узлами. Этот режим подходит для обработки средних и больших объемов данных.
Кластерный режим. Spark работает в режиме кластера в распределенной вычислительной среде, такой как Hadoop или Mesos. Этот режим подходит для крупномасштабной обработки данных, предполагающей распределение данных по нескольким узлам.
Лучший режим развертывания Spark для вашего варианта использования определяется размером ваших данных и ресурсами, доступными в вашей среде.
Распространенные случаи использования Spark в области обработки данных
Пакетная обработка
Spark часто используется для пакетной обработки огромных наборов данных. В этом варианте использования Spark считывает данные из нескольких источников данных, выполняет преобразования данных и записывает результаты в целевое хранилище данных. Функции пакетной обработки Spark делают его идеальным для таких задач, как ETL (извлечение, преобразование, загрузка), хранение данных и анализ данных.
Вот пример рабочего процесса пакетной обработки с использованием Spark:
# Import the necessary modules
from pyspark.sql import SparkSession
# Create a Spark session
spark = SparkSession.builder.appName("Batch Processing").getOrCreate()
# Read data from a CSV file
data = spark.read.csv("data.csv", header=True, inferSchema=True)
# Apply transformations
data_transformed = data.filter("age > 18").groupBy("gender").count()
# Write results to a target data store
data_transformed.write.mode("overwrite").csv("output")
В этом примере мы считываем данные из CSV-файла, применяем некоторые преобразования для отсеивания лиц моложе 18 лет и группируем оставшиеся данные по полу. Наконец, мы записываем результаты в CSV-файл.
Data Streaming в режиме реального времени
Spark также может использоваться для потоковой передачи данных в реальном времени. В этом случае Spark собирает данные из источника данных в реальном времени, например из датчиков или социальных сетей, и выполняет обработку потока данных в реальном времени.
Ниже приведен пример рабочего процесса потоковой передачи данных в реальном времени с использованием Spark:
# Import the necessary modules
from pyspark.sql import SparkSession
from pyspark.streaming import StreamingContext
# Create a Spark session
spark = SparkSession.builder.appName("Real-time Streaming").getOrCreate()
# Create a streaming context
ssc = StreamingContext(spark.sparkContext, batchDuration=10)
# Read data from a Kafka topic
data_stream = ssc.kafkaStream("localhost:9092", "data_topic")
# Apply transformations
data_transformed = data_stream.filter(lambda x: x["age"] > 18).map(lambda x: (x["gender"], 1)).reduceByKey(lambda x, y: x + y)
# Print results to console
data_transformed.pprint()
# Start the streaming context
ssc.start()
ssc.awaitTermination()
В этом примере мы читаем данные из темы Kafka и применяем некоторые преобразования, чтобы отфильтровать лиц в возрасте до 18 лет и сгруппировать оставшиеся данные по полу. Наконец, мы выводим результаты на консоль.
Хотите научиться работать со Spark? Приходите в Слёрм на курс Spark-инженер. Это продвинутый курс по самым мощным инструментам обработки больших данных. Он будет интересен:
Тем, кому нужно проектировать и создавать пайплайны поставки данных.
Бэкенд-разработчикам, у которых в проекте вдруг завелись большие данные.
Архитекторам, которые выбирают стек для проекта с большими данными.
Тем, кто занимается эксплуатацией системы, в которой работают дата-саентисты, а система работает медленно и нестабильно.
Дата-инженерам, которые хотят повысить свою квалификацию.
Что будет на курсе Spark-инженер
Научитесь автоматизировать рутину на Scala и Python: сборку, конфиги, парсинг, генерацию.
Научитесь строить дата-пайплайны и выстраивать эффективную работу дата-архитектуры.
На практике развернёте кластер в Яндекс Облаке и реализуете деплой приложения.
Научитесь распределять ресурсы кластера, выбирать распределенное хранилище данных.
Научитесь готовить данные и обучать модель Spark ML.
Настроите сбор данных в реальном времени.
Первый поток курса Spark-инженер стартует в ноябре. Сейчас на него действуют ранние цены. Спешите!
Комментарии (2)
Ninil
30.08.2023 06:23+3А в чем смысл статьи кроме как рекламе курса? Настолько избитые истины написаны...
mikegordan
Центром всех стриминговых являются окно, у Спарта проблемы как раз с этим. Советую начать с Flink , т.к. там у окон можно легко переопределять триггеры, из коробки полно разных типов. 3 уровня абстракции api и для кода и для SQL style. Самое главное что при стриминге по event watermark через тригеры заводятся таймеры на закрытия. А например у Спарк такого нету, чеки идут только на пришедшее новое сообщения. )