Что такое Photon?

Photon — это нативный для Azure Databricks векторизованный движок обработки запросов, который ускоряет SQL-нагрузки, вызовы API DataFrame, конвейеры ETL и потоковые нагрузки без сохранения состояния. Photon обрабатывает данные пакетами по столбцам, значительно повышая производительность по сравнению с традиционным построчным выполнением. Photon также совместим с API Apache Spark, поэтому он работает с существующим кодом без изменений.

Принцип работы Фотона

Для поддерживаемых операций Photon заменяет подсистему выполнения Spark SQL на основе JVM собственной средой выполнения C++. Оптимизатор запросов Apache Spark (Catalyst) по-прежнему планирует выполнение вашего запроса, но на уровне исполнения обработку берёт на себя Photon, обрабатывая данные колоночными пакетами, а не построчно. Когда Photon обнаруживает неподдерживаемую операцию при выполнении запроса, он автоматически переключается на среду выполнения Spark для оставшейся части этой операции.

Photon обрабатывает данные пакетами по несколько тысяч строк, что позволяет современным процессорам использовать SIMD-инструкции для обработки нескольких значений за один такт процессора. Работая на нативном C++ вместо JVM, Photon устраняет паузы, вызванные сборкой мусора, задержки прогрева JIT-компилятора и накладные расходы на память. Пакетная обработка в столбцовом формате обеспечивает последовательное чтение с эффективным использованием кэша, что позволяет максимально использовать пропускную способность памяти и повысить эффективность конвейера процессора.

Архитектура Фотона повышает производительность несколькими способами:

  • Ускорение запросов: Photon обеспечивает до 5 раз лучшее соотношение цены и производительности для рабочих нагрузок обработки данных и аналитики по сравнению с другими облачными хранилищами данных согласно результатам отраслевых тестов TPC-DS.
  • Оптимизированные соединения и shuffle-операции: заменяет соединения sort-merge на высокопроизводительные hash join и использует переработанный колоночный механизм shuffle для повышения пропускной способности в крупномасштабных операциях соединения.
  • Производительность записи: Собственный модуль записи Parquet в Photon ускоряет операции записи в Delta Lake, Apache Iceberg и Parquet, включая UPDATE, DELETE, MERGE INTO, INSERT и CREATE TABLE AS SELECT. Широкие таблицы с тысячами столбцов видят особенно значительные улучшения.
  • Эффективность сканирования: реализует откат фильтра, очистку словаря и пропуск групп строк для уменьшения объема операций чтения данных из хранилища, даже при обработке множества небольших файлов.
  • Кэш дисков и параллелизм. Обеспечивает более быстрый доступ через кэш дисков и повышает пропускную способность одновременных запросов в интерактивных рабочих нагрузках бизнес-аналитики.
  • Интеграция с SQL и API DataFrame: Поддерживает API SQL и DataFrame для Python, R, Scala и Java без изменения кода.

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

Интеграция с платформой Azure Databricks

Photon ускоряет рабочие нагрузки на платформе Azure Databricks. Вам не нужно изменять код или запросы, чтобы воспользоваться преимуществами Photon.

  • Аналитика SQL и бизнес-аналитика. Фотон — это механизм по умолчанию для всех хранилищ SQL, панелей мониторинга питания, нерегламентированных запросов и запланированных отчетов.
  • Проектирование ETL и данных. Пакетные задания, созданные с помощью SQL или API кадра данных, получают преимущества более быстрого сканирования, соединения, агрегирования и записи. Встроенный модуль записи Parquet особенно хорошо подходит для загрузки в Delta Lake, Apache Iceberg и таблицы Parquet.
  • Lakeflow Spark Declarative Pipelines: включение Photon в конфигурации конвейера помогает ускорить выполнение Lakeflow Spark Declarative Pipelines.
  • Потоковая передача: Photon поддерживает потоковую передачу без отслеживания состояния при записи в приемник Delta или Parquet. Поддерживаемые источники включают Delta, Parquet, CSV, JSON, Kafka и Kinesis. Потоковая передача с отслеживанием состояния не поддерживается.
  • ИИ и машинное обучение: Photon повышает производительность операций Spark SQL, DataFrames, проектирования признаков и GraphFrames.

Фотонное обеспечение

Photon всегда включен для бессерверных вычислений, SQL-хранилищ и бессерверных конвейеров Lakeflow Spark Declarative Pipelines.

Для классических универсальных вычислительных ресурсов, вычислительных ресурсов для заданий и классических конвейеров Lakeflow Spark Declarative Pipelines Photon включен по умолчанию; его можно включать и отключать с помощью флажка Use Photon Acceleration в разделе Performance при создании или редактировании вычислительного ресурса. См. раздел "Использование ускорения фотона". Если вы создаете эти ресурсы с помощью API кластеров или API заданий, необходимо явно включить Photon, установив для этого значение runtime_enginePHOTON. Если вы используете Pipelines API, задайте для photon значение true.

Функции, для которых требуется включить Photon

Для следующих функций требуется включение Photon:

Поддерживаемые типы экземпляров

Photon поддерживает несколько типов экземпляров для драйвера и рабочих узлов. Скорость потребления DBU у типов экземпляров Photon отличается от скорости таких же типов экземпляров, работающих не в среде Photon. Дополнительные сведения о экземплярах Photon и использовании DBU см. на странице цен Azure Databricks.

Поддерживаемые операторы, выражения и типы данных

Фотон охватывает следующие операторы, выражения и типы данных. Когда запрос использует неподдерживаемую операцию, Photon прозрачно возвращается в среду выполнения Spark для этой части выполнения.

Операторы

  • Сканирование (Parquet, Delta, CSV, JSON), Фильтр, Project
  • Хэш агрегирование/присоединение/перетасовка
  • Nested-Loop Присоединение
  • Null-Aware антиприсоединения
  • Пространственное соединение (варианты с широковещательной передачей и с перемешиванием, поддерживающие ST_Intersects, ST_Contains, ST_Covers, ST_Equals, ST_Touches, ST_Within и ST_DWithin)
  • Объединение, расширение, скалярный вложенный запрос
  • Приемник записи Delta/Parquet
  • Сортировка, TopK, Limit
  • Функция окна

Выражения

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

  • Сравнение и логика
  • Арифметика / Математика
  • Условные (IF, CASE и т. д.)
  • String
  • Приведение типов
  • Агрегаты, включая Min/Max/MinBy/MaxBy для вложенных типов
  • Дата/Временная метка/Формат даты

Типы данных

  • Байт/Шорт/Инт/Лонг
  • Логический
  • Строковые и двоичные типы
  • Десятичное число
  • Флоат/Дабл
  • Дата/метка времени
  • TimestampNTZ
  • Структура
  • Массив
  • Карта
  • Вариант
  • Null
  • Геометрия
  • География
  • Сопоставляемая строка

Мониторинг использования фотона

Вы можете отслеживать, сколько запросов выполняется в Photon, используя следующие средства:

  • Spark UI (классические универсальные вычисления и вычисления для заданий): на вкладке SQL/DataFrame в Spark UI операторы Photon отображаются оранжевым цветом в визуализации DAG запроса. Стандартные операторы Spark отображаются синим цветом. Это помогает определить, какие части вашего запроса выполняются с помощью Photon, а какие используют среду выполнения Spark.
  • Профиль запроса (хранилища SQL и бессерверные вычисления). В представлении сведений о выполнении отображается процент времени, затраченного на задачу в Photon. План запроса отличает операторы Фотона (фиолетовый) от стандартных операторов (серый).

Если вы заметили, что запрос не использует Photon должным образом, проверьте, использует ли он неподдерживаемые операции, пользовательские функции (UDF) или форматы данных, которые вызывают переход к среде выполнения Spark.

Ограничения

  • Если рабочая нагрузка сталкивается с неподдерживаемой операцией, вычислительный ресурс автоматически переключается на среду выполнения Spark на оставшуюся часть этой операции. Запрос по-прежнему выдает правильные результаты.
  • Photon не поддерживает UDF (пользовательские функции), API RDD и API Dataset.
  • Потоковая передача с отслеживанием состояния не поддерживается. Photon поддерживает только потоковую передачу без отслеживания состояния.
  • Фотон не улучшает запросы, которые обычно выполняются в течение двух секунд.