Поделиться через


Собственный обработчик выполнения для Fabric Spark

Собственный механизм выполнения — это улучшение выполнения заданий Apache Spark в Microsoft Fabric. Этот векторизованный механизм оптимизирует производительность и эффективность запросов Spark, выполняя их непосредственно в инфраструктуре Lakehouse. Простая интеграция подсистемы означает, что она не требует изменений кода и избегает блокировки поставщика. Он поддерживает API Apache Spark и совместим с средой выполнения 1.2 (Spark 3.4), а также работает с форматами Parquet и Delta. Независимо от расположения данных в OneLake или при доступе к данным через сочетания клавиш, собственный механизм выполнения повышает эффективность и производительность.

Собственный модуль выполнения значительно повышает производительность запросов при минимизации операционных затрат. Он обеспечивает замечательное повышение скорости, достигая до четырех раз быстрее производительности по сравнению с традиционными OSS (открытый код программным обеспечением) Spark, как проверено тестом TPC-DS 1TB. Подсистема работает над широким спектром сценариев обработки данных, начиная от обычных приемов данных, пакетных заданий и задач ETL (извлечение, преобразование, загрузка) для сложных аналитических данных и адаптивных интерактивных запросов. Пользователи получают преимущества от ускорения обработки, повышенной пропускной способности и оптимизированного использования ресурсов.

Модуль машинного выполнения основан на двух ключевых компонентах OSS: Velox, библиотеке ускорения баз данных C++, представленной Meta, и Apache Клейковина (инкубирование), средний уровень, отвечающий за разгрузку выполнения обработчиков SQL на основе JVM на собственных ядрах, представленных Intel.

Примечание.

Собственный обработчик выполнения в настоящее время находится в общедоступной предварительной версии. Дополнительные сведения см. в текущих ограничениях. На этом этапе предварительной версии не существует дополнительных затрат, связанных с его использованием.

Когда следует использовать собственный обработчик выполнения

Собственный механизм выполнения предлагает решение для выполнения запросов в крупномасштабных наборах данных; он оптимизирует производительность с помощью собственных возможностей базовых источников данных и минимизации затрат, связанных с перемещением данных и сериализацией в традиционных средах Spark. Подсистема поддерживает различные операторы и типы данных, включая хэш-агрегат свертки, присоединение к вложенным циклам широковещательной трансляции (BNLJ) и точные форматы меток времени. Тем не менее, чтобы полностью воспользоваться возможностями подсистемы, следует рассмотреть его оптимальные варианты использования:

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

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

Включение собственного обработчика выполнения

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

Внимание

Собственный модуль выполнения в настоящее время поддерживает последнюю версию среды выполнения ga, которая является средой выполнения 1.2 (Apache Spark 3.4, Delta Lake 2.4).

Включение для определения заданий Записной книжки или Spark

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

%%configure 
{ 
   "conf": {
       "spark.native.enabled": "true", 
       "spark.gluten.enabled": "true", 
       "spark.shuffle.manager": "org.apache.spark.shuffle.sort.ColumnarShuffleManager" 
   } 
} 

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

Снимок экрана: включение собственного обработчика выполнения в записной книжке.

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

Внимание

Перед запуском сеанса Spark необходимо выполнить настройку собственного обработчика выполнения. После запуска spark.shuffle.manager сеанса Spark параметр становится неизменяемым и не может быть изменен. Убедитесь, что эти конфигурации задаются в %%configure блоке в записных книжках или в построителе сеансов Spark для определений заданий Spark.

Включение на уровне среды

Чтобы обеспечить единообразное улучшение производительности, включите собственный модуль выполнения во всех заданиях и записных книжках, связанных с вашей средой:

  1. Перейдите к параметрам среды.

  2. Перейдите к свойствам Spark.

  3. Заполните поля на экране свойств Spark, как показано на следующем рисунке.

Свойство Значение
spark.native.enabled true
spark.клейковина.enabled true
spark.shuffle.manager org.apache.spark.shuffle.sort.ColumnarShuffleManager

Снимок экрана: включение собственного обработчика выполнения в элементе среды.

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

Управление уровнем запроса

Механизмы включения собственного обработчика выполнения на уровнях клиента, рабочей области и среды, легко интегрированных с пользовательским интерфейсом, находятся в активной разработке. В то же время можно отключить собственный обработчик выполнения для конкретных запросов, особенно если они включают операторы, которые в настоящее время не поддерживаются (см . ограничения). Чтобы отключить, задайте для конфигурации Spark spark.gluten.enabled значение false для конкретной ячейки, содержащей запрос.

%%sql 
SET spark.native.enabled=FALSE; 
SET spark.gluten.enabled=FALSE; 

Снимок экрана: отключение собственного обработчика выполнения в записной книжке.

После выполнения запроса, в котором отключен собственный обработчик выполнения, необходимо повторно включить его для последующих ячеек, задав spark.клейковина.enabled значение true. Этот шаг необходим, так как Spark выполняет ячейки кода последовательно.

%%sql 
SET spark.native.enabled=TRUE; 
SET spark.gluten.enabled=TRUE; 

Определение операций, выполняемых подсистемой

Существует несколько методов, чтобы определить, был ли оператор в задании Apache Spark обработан с помощью собственного обработчика выполнения.

Пользовательский интерфейс Spark и сервер журнала Spark

Перейдите к серверу журнала Spark или пользовательского интерфейса Spark, чтобы найти нужный запрос. В плане запроса, отображаемом в интерфейсе, найдите все имена узлов, которые заканчиваются суффиксом Преобразователя. Суффикс указывает, что собственный обработчик выполнения выполнил операцию. Например, узлы могут быть помечены как RollUpHashAggregateTransformer, ProjectExecTransformer, BroadcastHashJoinExecTransformer, ShuffledHashJoinTransformer или BroadcastNestedLoopJoinExecTransformer.

Снимок экрана: проверка визуализации DAG, которая заканчивается суффиксом Преобразователя.

Объяснение кадра данных

Кроме того, можно выполнить df.explain() команду в записной книжке, чтобы просмотреть план выполнения. В выходных данных найдите те же суффиксы преобразователя . Этот метод позволяет быстро проверить, обрабатываются ли определенные операции машинным обработчиком выполнения.

Снимок экрана, показывающий, как проверить физический план запроса и увидеть, что запрос был выполнен машинным обработчиком выполнения.

Резервный механизм

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

Снимок экрана: резервный механизм.

Снимок экрана: проверка журналов, связанных с резервным механизмом.

Ограничения

Хотя собственный модуль выполнения повышает производительность заданий Apache Spark, обратите внимание на текущие ограничения.

  • Подсистема не поддерживает секционированную запись для таблиц Delta. Некоторые операции, связанные с разностями, не поддерживаются, включая операции слияния, проверки контрольных точек и векторы удаления.
  • Некоторые функции и выражения Spark несовместимы с собственным обработчиком выполнения, такими как определяемые пользователем функции (ОПРЕДЕЛЯЕМЫЕ пользователем функции) и array_contains функция, а также структурированная потоковая передача Spark. Использование этих несовместимых операций или функций в составе импортированной библиотеки также приведет к возврату к подсистеме Spark.
  • Сканирование из решений хранилища, использующих частные конечные точки, не поддерживается.
  • Модуль не поддерживает режим ANSI, поэтому он выполняет поиск и после включения режима ANSI, он возвращается в ванильную Spark.

При использовании фильтров дат в запросах важно убедиться, что типы данных на обеих сторонах сравнения соответствуют, чтобы избежать проблем с производительностью. Несогласованные типы данных могут не привести к увеличению выполнения запросов и могут потребовать явного приведения. Всегда убедитесь, что типы данных левой стороны (LHS) и справа (RHS) сравнения идентичны, так как несовпаденные типы не всегда будут автоматически приведение. Если несоответствие типов неизменяемо, используйте явное приведение для сопоставления типов данных, например CAST(order_date AS DATE) = '2024-05-20'. Запросы с несовпаденными типами данных, требующими приведения, не будут ускорены машинным обработчиком выполнения, поэтому обеспечение согласованности типов имеет решающее значение для поддержания производительности. Например, вместо order_date = '2024-05-20' того order_date , где находится DATETIME и строка DATE, явно приведение order_date , чтобы DATE обеспечить согласованные типы данных и повысить производительность.

Примечание.

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