Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы к экзу по БД.docx
Скачиваний:
22
Добавлен:
12.02.2024
Размер:
257.66 Кб
Скачать
  1. Spark. Библиотека Spark Core. Spark rdd. 2 типа операций над rdd. Lazy Evaluation. Типы трансформаций. Lineage. Использование cache, разница между cache и persist.

Apache Spark - это мощный и распределенный фреймворк для обработки больших объемов данных параллельно на кластерах. Он предоставляет API на Scala, Java, Python и R, что делает его удобным для разработчиков с разным опытом.

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

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

2 типа операций над RDD:

  • Трансформации: Эти операции преобразуют RDD в новое RDD. Примеры включают map, filter, groupBy и другие. Трансформации выполняются лениво. При вызове трансформации достраивается граф вычислений и больше ничего не происходит.

  • Действия: Эти операции возвращают результат вычислений на RDD. Примеры включают count, collect, reduce и другие. Действия инициируют выполнение ленивых трансформаций, вызывая вычисления.

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

Типы трансформаций:

  • Узкие (Narrow) трансформации - это трансформации, при которых каждый элемент входного RDD участвует только в одном разделе выходного RDD. Примеры: map, flatmap, filter.

  • Широкие (Wide) трансформации - это трансформации, при которых один элемент входного RDD может участвовать в нескольких разделах выходного RDD. Примеры: groupByKey, reduceByKey.

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

Метод cache() используется для кэширования RDD в памяти. Кэширование ускоряет многократные итерации над данными, так как они остаются в памяти и не пересчитываются каждый раз.

Разница между cache и persist:

cache и persist являются синонимами и используются для сохранения RDD в памяти. Однако persist предоставляет дополнительные опции для определения уровня хранения данных (например, в памяти, на диске), что дает большую гибкость по сравнению с cache.

  1. Spark. Библиотеки Spark Streaming и Spark Structured Streaming. Основные сценарии применения. Ключевые различия. Почему Spark Streaming – это не streaming обработка данных? Объект DStream. Интервал скольжения и длина окна.

Apache Spark - это мощный и распределенный фреймворк для обработки больших объемов данных параллельно на кластерах. Он предоставляет API на Scala, Java, Python и R, что делает его удобным для разработчиков с разным опытом.

Spark Streaming – это инструмент в библиотеке Apache Spark, который позволяет анализировать и обрабатывать потоковые данные в реальном времени. Этот компонент оперирует с дискретизированным потоком DStream, чей API базируется на отказоустойчивой структуре RDD. Он работает с маленькими порциями данных (называемыми "микро-пакетами"), обрабатывая их параллельно. Это позволяет выполнять различные операции, такие как мониторинг данных из разных источников, обработка событий и агрегация данных непрерывно поступающих из различных источников данных.

Spark Structured Streaming – это библиотека фреймворка Apache Spark для обработки непрерывных потоковых данных. Он предоставляет API для обработки данных потоков в структурированном формате, что делает его более похожим на работу с обычными таблицами и фреймами данных. Это упрощает обработку потоковых данных, аналогично обработке статических данных. Его основные структуры данных – Dataframe и Dataset, поддерживаемыми в языках Java, Scala, Python и R.

Основные сценарии применения:

Spark Streaming:

1. Реальное время: Обработка и анализ данных в реальном времени из разных источников, таких как системы мониторинга, сенсоры, социальные медиа и другие.

2. Машинное обучение в реальном времени: Тренировка моделей машинного обучения на потоковых данных.

Spark Structured Streaming:

1. Обработка событий потоковых данных: Для аналитики в реальном времени, например, агрегация и фильтрация событий.

2. Интеграция с различными источниками данных: для непрерывной обработки потоков данных, таких как файлы, Kafka, сокеты и другие потоковые источники.

Ключевые различия:

Для выполнения потоковых операций Spark Streaming работает с DStream API, который использует RDD, а Structured Streaming – со API DataFrame и Dataset.

Spark Streaming:

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

Spark Structured Streaming:

Предоставляет более декларативный и удобный API, аналогичный работе с статическими данными.

Почему Spark Streaming – это не streaming обработка данных?

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

Объект DStream:

DStream (Discretized Stream) - это основной абстрактный тип данных в Spark Streaming. Он представляет поток данных, который разбивается на короткие временные интервалы, каждый из которых представляет собой RDD (Resilient Distributed Dataset) в Spark, содержащий данные за это время.

Интервал скольжения (Sliding Interval) и Длина окна (Window Length):

Интервал скольжения: Определяет, с какой частотой Spark будет генерировать RDDs выходного DStream. Например, если интервал скольжения равен 5 секундам, то каждые 5 секунд Spark будет создавать новый RDD.

Длина окна: Определяет временное окно, в пределах которого выполняются операции агрегации над данными. Оно описывается в терминах времени, например "5 минут" или "1 час".

  1. Spark. MLLib и Spark ML. Основные различия. Model Distribution и Data Distribution подходы в Big ML. Transformer, Estimator, Pipeline и Evaluator в Spark ML. Жизненный цикл моделей машинного обучения.

Apache Spark - это мощный и распределенный фреймворк для обработки больших объемов данных параллельно на кластерах. Он предоставляет API на Scala, Java, Python и R, что делает его удобным для разработчиков с разным опытом.

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

Spark ML - это модуль машинного обучения в Spark, который предоставляет более высокоуровневые API для построения моделей машинного обучения. Он предоставляет удобные инструменты для работы с данными, обучения моделей и оценки их качества.

Основные различия между MLLib и Spark ML заключаются в уровне абстракции и удобстве использования. Spark ML предоставляет более высокоуровневые API и удобные инструменты для работы с данными и моделями, в то время как MLLib предоставляет более низкоуровневые API и реализации классических алгоритмов машинного обучения. mllib содержит устаревший API, созданный на основе RDD. ml предоставляет API более высокого уровня, созданный на основе DataFrames, для построения конвейеров машинного обучения.

Model Distribution и Data Distribution подходы в Big ML:

Model Distribution подразумевает распределение модели между несколькими узлами для параллельного выполнения прогнозирования. Data Distribution подразумевает распределение данных между узлами для параллельного обучения модели.

Transformer, Estimator, Pipeline и Evaluator в Spark ML:

  • Transformer - это объект, который преобразует один DataFrame в другой, добавляя новые столбцы.

  • Estimator - это объект, который обучает модель на основе данных и генерирует Transformer.

  • Pipeline -это последовательность этапов (Estimator или Transformer), которая используется для построения и обучения модели.

  • Evaluator - это объект, который оценивает качество модели на основе заданных метрик.

Жизненный цикл моделей машинного обучения включает следующие этапы:

1. Подготовка данных: Получение, очистка и подготовка данных для обучения модели.

2. Обучение модели: Использование обучающих данных для создания модели машинного обучения.

3. Оценка модели: Оценка качества модели на основе тестовых данных или кросс-валидации.

4. Настройка модели: Использование результатов оценки для настройки параметров модели.

5. Развертывание модели: Развертывание обученной модели для использования в реальном времени или в продакшене.

6. Мониторинг и обслуживание: Отслеживание производительности модели и ее обслуживание в течение времени.

  1. Apache Kafka. Назначение и принцип работы. Архитектура. High Availability конфигурация. Основные сущности. Kafka broker. Роль Zookeeper в функционировании Kafka. Структура Kafka Message. Kafka file system и основные файлы. Kafka Producer и Kafka Consumer: алгоритм записи и чтения данных из Kafka.

Apache Kafka - это распределенная платформа, предоставляющая высокую пропускную способность и надежность при передаче, хранении и обработке потоков данных.

Основное назначение Kafka - это обеспечение надежной и эффективной передачи данных между различными системами.

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

Архитектура Kafka включает в себя следующие основные компоненты:

  • Kafka Broker - это сервер, который хранит данные и обрабатывает запросы от клиентов.

  • Zookeeper - используется для управления и координации брокеров Kafka.

  • Producer - отправляет сообщения в темы Kafka.

  • Consumer - читает сообщения из тем Kafka.

High Availability конфигурация в Kafka обеспечивает отказоустойчивость и надежность системы. Для этого используется репликация данных, когда каждая партиция может иметь несколько реплик на разных брокерах. Также используется механизм выбора лидера (leader) для каждой партиции, который отвечает за запись и чтение данных.

Основные сущности:

  • Брокер (Broker) - Брокеры представляют собой узлы в кластере Kafka, которые принимают, сохраняют и доставляют сообщения.

  • Зукипер (ZooKeeper) — инструмент-координатор, действует как общая служба конфигурации в системе.

  • Записи (Records) - сообщения, содержащие ключ, значение и метаданные.

  • Топик (Topic) - тема представляет собой категорию или канал, в который производитель отправляет сообщения

  • Продюсер (Producer) - производитель отвечает за генерацию и отправку сообщений в Kafka брокер

  • Консьюмер (Consumer) - высокопроизводительный получатель сообщений

Kafka Broker - это сервер, который хранит данные и обрабатывает запросы от клиентов. Он является основным компонентом в архитектуре Kafka и может быть сконфигурирован для хранения данных, обработки запросов и репликации данных.

Роль Zookeeper в функционировании Kafka заключается в управлении и координации брокеров Kafka. Zookeeper отслеживает структуру брокеров, тем, партиций и репликацию данных, а также обеспечивает выбор лидера для каждой партиции.

Структура Kafka Message состоит из ключа (key), значения (value) и временной метки (timestamp). Ключ используется для определения партиции, в которую будет записано сообщение, а значение содержит собственно данные. Временная метка указывает на время создания сообщения.

Kafka file system состоит из нескольких основных файлов:

  • Log файлы: Хранят данные сообщений по партициям.

  • Index файлы: Содержат индексы для быстрого поиска сообщений в лог файлах.

  • Time index файлы: Используются для быстрого поиска сообщений по временной метке.

Kafka Producer и Kafka Consumer: алгоритм записи и чтения данных из Kafka:

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

Round-robin - сообщения равномерно распределяются между различными партициями. Каждое новое сообщение будет отправлено в следующую партицию по циклу.

Key_hash%n - сообщения отправляются в партиции на основе хеш-значения ключа сообщения. Каждый ключ хэшируется и определяет, в какую партицию будет отправлено сообщение.

Explicit partition - отправитель указывает, в какую конкретную партицию отправить сообщение. В этом случае отправитель явно указывает номер партиции, в которую нужно отправить сообщение.