---
title: Особенности Spark
questionDates:
  q-transfer-0302: '2026-10-01'
  q-transfer-0303: '2026-10-01'
seo:
  description: >-
    Тема «Особенности Spark» для собеседования Data Engineer. Какие есть
    драйверы и воркеры в Spark? Проблемы больших и малых файлов.
  title: Особенности Spark — Data Engineer
---

[Все темы Data Engineer](/prep/data-engineer)

## <strong>Какие есть драйверы и воркеры в Spark?</strong> [#q-14bee738d69b8132b4b3fd00d1a02565]

В Spark существуют два основных типа узлов&#58; драйверы <code>&#40;drivers&#41;</code> и воркеры <code>&#40;workers&#41;</code>.

1. Драйвер&#58; процесс, управляющий конкретным Spark-приложением. В client mode он работает в клиентской среде, в cluster mode запускается в кластере; он не обязан находиться на главном узле.

1. <strong>Воркеры</strong> <code>&#40;workers&#41;</code>&#58; Это узлы в
   кластере, на которых выполняются фактические вычисления. Воркеры принимают
   задачи от драйвера и выполняют их параллельно на доступных ресурсах. Каждый
   воркер имеет определенное количество ядер и памяти для выполнения задач.

:::note[Ссылки для изучения]

1. [Spark: worker node, executor, driver и режимы client/cluster](https://docs.arenadata.io/ru/ADH/current/spark/architecture.html)
   :::

---

## <strong>Проблемы больших и малых файлов.</strong> [#q-14bee738d69b8130b752e0213013636a]

Проблемы с большими и маленькими файлами возникают при обработке данных в распределенных системах, таких как Hadoop и Spark&#58;

{/* prettier-ignore */}
1. <strong>Большие файлы</strong>&#58;

    - Проблема распределения&#58; Большие файлы могут быть сложны для эффективного распределения и параллельной обработки на узлах кластера.

    - Потеря единства&#58; Разделение больших файлов может привести к тому, что части данных не будут целостными или согласованными.

1. <strong>Маленькие файлы</strong>&#58;

    - Избыточность метаданных&#58; Множество маленьких файлов может вызвать избыточную нагрузку на метаданные файловой системы, что снижает производительность.

    - Накладные расходы на ввод-вывод&#58; Обработка маленьких файлов может привести к накладным расходам на ввод-вывод, так как каждый файл требует отдельного обращения к диску.

:::note[Ссылки для изучения]

1. [Размер файлов Spark: input partitions, стоимость открытия и управление числом выходных разделов](https://docs.arenadata.io/ru/ADH/current/how-to/spark/spark-performance.html)
   :::

---

## <strong>Что такое</strong> <code>Sparkcontext</code><strong>?</strong> [#q-14bee738d69b81db91c2c183d8819e34]

<code>SparkContext</code> - это основной интерфейс для взаимодействия с Apache
Spark, который предоставляет доступ к кластеру Spark. Он используется для
создания RDD (Resilient Distributed Datasets), выполнения операций над данными,
управления конфигурацией Spark и запуска задач на кластере.
<code>SparkContext</code> инициализируется один раз в приложении Spark и
представляет точку входа для выполнения операций в распределенной среде.

:::note[Ссылки для изучения]

1. [SparkContext: взаимодействие с кластером и управление исполнением](https://docs.arenadata.io/ru/ADH/current/spark/architecture.html)
   :::

---

## <strong>Что такое оркестрация и партиционирование?</strong> [#q-14bee738d69b819dbe55df454e97069b]

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

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

:::note[Ссылки для изучения]

1. [Оркестрация Airflow: DAG, задачи и зависимости](https://docs.arenadata.io/ru/ADO/current/architecture.html)
1. [RDD и вычислительные партиции — авторская лекция](https://materials.science.iu5.bmstu.ru/devops/spark/presentation.pdf#page=23)
   :::

---

## <strong>Как работает кэширование в Spark?</strong> [#q-14bee738d69b8109a778d157e5856a31]

В Spark кэширование используется для временного хранения промежуточных результатов вычислений в памяти для повторного использования. Когда вы выполняете операции над RDD или DataFrame, Spark может сохранить промежуточные результаты в памяти и использовать их в последующих операциях. Это позволяет избежать повторного вычисления данных и ускоряет выполнение задач. Кэширование может быть осуществлено с помощью метода <code>cache&#40;&#41;</code> или <code>persist&#40;&#41;</code>, который позволяет указать уровень хранения (например, в памяти, на диске или во внешних хранилищах).

:::note[Ссылки для изучения]

1. [Кеширование RDD: cache, persist, unpersist и уровни хранения](https://materials.science.iu5.bmstu.ru/devops/spark/presentation.pdf#page=48)
2. [Cache и Persist в Spark. Евгений Виндюков, с 49:55](https://www.youtube.com/watch?v=Gj0oSVmv7k4&t=2995s)

:::

---

## <strong>Как работает Spark SQL и какие преимущества он предлагает?</strong> [#q-14bee738d69b81899e59cb9ae138d5d7]

Spark SQL — это модуль Apache Spark для обработки структурированных данных с использованием SQL. Он предлагает следующие преимущества&#58;

1. <strong>Интеграция с SQL</strong>&#58; Возможность выполнения SQL-запросов на
   данных, хранящихся в Spark.

1. <strong>Catalyst Optimizer</strong>&#58; Мощный оптимизатор запросов, который
   улучшает производительность выполнения.

1. <strong>Поддержка DataFrame и Dataset API</strong>&#58; Предоставляет
   высокоуровневые абстракции для работы с данными.

1. <strong>Совместимость с различными источниками данных</strong>&#58;
   Поддерживает чтение и запись данных в различных форматах (например, Parquet,
   JSON, ORC).

1. <strong>Интеграция с BI инструментами</strong>&#58; Позволяет использовать
   инструменты визуализации и анализа данных.

Пример использования Spark SQL&#58;

```scala
val spark = SparkSession.builder().appName("SparkSQLExample").getOrCreate()
val df = spark.read.json("hdfs://path/to/json")
df.createOrReplaceTempView("table")
val result = spark.sql("SELECT * FROM table WHERE age > 21")
result.show()
```

:::note[Ссылки для изучения]

1. [Spark DataFrame и SQL-представления: схемы, операции и запросы](https://learn.microsoft.com/ru-ru/azure/databricks/pyspark/reference/classes/dataframe)
1. [Catalyst: оптимизация логического и физического плана Spark SQL](https://habr.com/ru/companies/neoflex/articles/417103/)
   :::

---

## <strong>Что такое</strong> <code>DataFrame</code> <strong>и чем он отличается от</strong> <code>RDD</code><strong>?</strong> [#q-14bee738d69b81dcb030d3a9d0c081df]

Отличие <code>DataFrame</code> от <code>RDD</code>&#58;

- <code>RDD</code> <strong>(Resilient Distributed Dataset)</strong>&#58;
  Основная абстракция данных в Spark, представляющая собой неизменяемую
  распределенную коллекцию объектов. RDD предоставляет низкоуровневый API для
  работы с данными.

- <code>DataFrame</code>&#58; Высокоуровневая абстракция данных, построенная на
  основе RDD. DataFrame представляет собой распределенную коллекцию данных,
  организованных в виде схемы (таблицы), где данные имеют имена столбцов и типы.
  DataFrame предоставляет удобные методы для выполнения операций с данными,
  такие как фильтрация, агрегирование и объединение.

:::note[Ссылки для изучения]

1. [Spark DataFrame: именованные колонки, схема и связь с RDD](https://learn.microsoft.com/ru-ru/azure/databricks/pyspark/reference/classes/dataframe)
1. [RDD: произвольная распределённая коллекция и зависимости](https://materials.science.iu5.bmstu.ru/devops/spark/presentation.pdf#page=16)
   :::

---

## <strong>Какие библиотеки и инструменты вы используете вместе с Apache Spark для анализа данных?</strong> [#q-14bee738d69b81f6ab83ca64b750b816]

Основные библиотеки и инструменты, которые я использую&#58;

1. <code>Hadoop HDFS</code>&#58; Распределенная файловая система для хранения
   больших данных.

1. <code>Hive</code>&#58; Хранилище данных на основе Hadoop для выполнения
   SQL-запросов.

1. <code>HBase</code>&#58; Распределенная база данных для хранения больших
   объемов данных с низкой задержкой.

1. <code>Kafka</code>&#58; Платформа для обработки потоков данных в реальном
   времени.

1. <code>Cassandra</code>&#58; Распределенная база данных NoSQL для обработки
   больших объемов данных.

1. <code>ElasticSearch</code>&#58; Поисковая и аналитическая система для работы
   с большими данными.

1. <code>Delta Lake</code>&#58; Хранилище данных на основе Apache Spark для
   управления версиями данных и обеспечения ACID-транзакций.

1. <code>MLlib</code>&#58; Библиотека машинного обучения для Apache Spark.

1. <code>GraphX</code>&#58; API для работы с графами в Apache Spark.

1. <code>Zeppelin</code> <strong>и</strong> <code>Jupyter</code>&#58;
   Интерактивные блокноты для анализа данных и визуализации результатов.

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

:::note[Ссылки для изучения]

1. [Spark и экосистема: Hive Metastore, notebooks, Airflow и Kubernetes на примере VK](https://habr.com/ru/companies/vk/articles/564680/)
   :::

---

## Что происходит после spark-submit? [#q-transfer-0302]

`spark-submit` передает конфигурацию cluster manager. В зависимости от deploy mode driver запускается локально или в кластере, создает SparkContext и запрашивает executors. Action строит job из lineage; scheduler делит его по shuffle boundaries на stages, а stages на tasks по партициям. Executors исполняют tasks и сообщают результаты driver. Команда получает конечный статус приложения, но конкретный lifecycle зависит от manager и deploy mode.

:::note[Ссылки для изучения]

1. [Выполнение Spark-приложения: spark-submit, driver, executors и планирование задач](https://docs.arenadata.io/ru/ADH/current/spark/architecture.html)
   :::

---

## Как диагностировать падение Spark job? [#q-transfer-0303]

Начинают с final application status и первого содержательного исключения в driver log, затем находят соответствующие executor/container logs и stage в Spark UI или history server. OOM различают по driver/executor и exit code; fetch failure связывают с потерянным executor, сетью или shuffle service, а не лечат одним retry. Фиксируют вход, конфигурацию и минимальный воспроизводимый запуск до изменения ресурсов. Диагностику начинают с конкретного stage, распределения tasks и логов исполнителя, а не с безусловного увеличения памяти.

:::note[Ссылки для изучения]

1. [Диагностика Spark-приложений: логи контейнеров, Spark UI и History Server в HDInsight](https://learn.microsoft.com/ru-ru/azure/hdinsight/spark/apache-spark-job-debugging)
   :::
