- •Ответы к экзамену по большим данным
- •Компонент Hadoop. Главные сервисы, схема взаимодействия. Пример взаимодействия сервисов Hadoop при выполнении задачи MapReduce.
- •Hdfs. Архитектура сервиса. Роль DataNode и NameNode. FsImage и Journal. High Availability конфигурация. Виды api.
- •Hdfs. Worm подход. Почему hdfs не любит маленькие файлы? Почему Secondary NameNode нельзя считать backup Node?
- •MapReduce. Стадии обработки клиентского запроса. Оптимизаторы: Combiner, Partitioner, Comparator с примерами использования. Хранение файлов до, вовремя и после выполнения запроса.
- •Yarn. Основные сервисы. Архитектура компонента. High Availability конфигурация. Пример выполнения запроса при обработке MapReduce задачи.
- •Пример выполнения запроса при обработке MapReduce задачи:
- •Yarn. Виды scheduler’ов. Fifo, Fair, Capacity. Достоинства и недостатки. Механизм очередей.
- •Hive. Назначение и принцип работы. Архитектура. High Availability конфигурация. Разница между schema-on-write и schema-on-read. Разница между managed и external таблицами.
- •Hive. Оптимизация работы. Партиции и бакеты: принцип работы. Формулы для распределения записей. Плюсы и минусы применения.
- •Hbase. Назначение и принцип работы. Архитектура. High Availability конфигурация. Модель данных. Minor и Major Compaction. Регион hBase и его составляющие
- •Spark. Назначение и принцип работы. Отличия от MapReduce. Архитектура. Основные api. Виды планировщиков в Spark.
- •Spark. Библиотека Spark Core. Spark rdd. 2 типа операций над rdd. Lazy Evaluation. Типы трансформаций. Lineage. Использование cache, разница между cache и persist.
- •Apache Kafka. Партиции и топики. Репликация данных. Распределение данных в топиках. Leader-follower архитектура. N-sync реплики. Удаление данных из Kafka.
- •Airflow. Назначение и принцип работы. Dag. Сущности Operator и Sensor. Основные виды операторов.
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.
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 час".
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. Мониторинг и обслуживание: Отслеживание производительности модели и ее обслуживание в течение времени.
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 - отправитель указывает, в какую конкретную партицию отправить сообщение. В этом случае отправитель явно указывает номер партиции, в которую нужно отправить сообщение.