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


Адаптация экссизивного кода Apache Spark для Azure Databricks

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

Внимание

При обновлении версий Apache Spark могут возникнуть критические изменения в синтаксисе. Ознакомьтесь с заметками о выпуске Databricks Runtime и версиями совместимости и руководством по миграции Spark.

Переход parquet на delta

Databricks рекомендует использовать Delta Lake вместо Parquet или ORC при записи данных. Azure Databricks оптимизировано для повышения эффективности при взаимодействии с таблицами, поддерживаемыми Delta Lake, и обновление данных и формы кода Parquet до Delta Lake выполняет лишь несколько шагов. См. статью "Миграция озера данных Parquet в Delta Lake".

Так как Delta Lake предоставляет гарантии транзакций ACID, вы можете упростить рабочие нагрузки для удаления обходных решений, направленных на создание псевдо транзакций в операциях Apache Spark. Вот некоторые примеры.

  • Создание структуры каталога или стратегии секционирования, которая позволяет одновременно обнаруживать все файлы из данной операции в рамках секции.
  • Настройка или использование хранилища метаданных для добавления транзакций для обнаружения новых данных.
  • Использование MSCK repair для регистрации файлов, записанных в таблицу в хранилище метаданных.
  • Использование alter table add partition для ручного добавления секций в таблицу.

Сведения о секционирования таблиц в Azure Databricks.

Примечание.

Рабочие нагрузки можно запускать без обновления используемых форматов данных, но многие из самых больших показателей производительности в Azure Databricks привязаны непосредственно к Delta Lake.

Перекомпилируйте код Apache Spark с совместимыми библиотеками Databricks Runtime

Каждая версия Databricks Runtime предварительно настроена с множеством библиотек, необходимых в приложениях Apache Spark. Вы можете установить дополнительные библиотеки для вычислений по мере необходимости, но по возможности Databricks рекомендует использовать версии библиотек, упакованные в databricks Runtime, которые тестируются для обеспечения совместимости. Каждый выпуск Databricks Runtime содержит список всех установленных библиотек. См . заметки о выпуске Databricks Runtime и версии совместимости.

Удаление команд создания SparkSession

Многие устаревшие рабочие нагрузки Apache Spark явно объявляют новую версию SparkSession для каждого задания. Azure Databricks автоматически создает SparkContext для каждого вычислительного кластера и создает изолированное средство SparkSession для каждой записной книжки или задания, выполняемого в кластере. Вы можете поддерживать возможность локальной компиляции и тестирования кода, а затем развернуть в Azure Databricks, обновив эти команды для использования SparkSession.builder().getOrCreate().

Удаление команд скрипта терминала

Apache Spark требует, чтобы программы явно объявляли о том, что они завершены с помощью таких команд, как sys.exit() или sc.stop(). Azure Databricks автоматически завершает работу и очищает задания по мере их завершения, поэтому эти команды не нужны и должны быть удалены.

Azure Databricks также автоматически завершает работу и очищает структурированные рабочие нагрузки потоковой передачи при завершении выполнения, чтобы удалить awaitTermination() и аналогичные команды из структурированных приложений потоковой передачи.

Доверие к Azure Databricks для настройки кластера

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

Запуск рабочих нагрузок

Теперь, когда вы удалили шаблоны, команды и параметры, которые могут повлиять на выполнение Azure Databricks, вы можете запускать рабочие нагрузки в тестовой среде и сравнивать производительность и результаты с устаревшей инфраструктурой. Хотя многие навыки вашей команды, возможно, разработали для устранения неполадок и повышения производительности рабочих нагрузок Apache Spark, по-прежнему можно использовать в Azure Databricks, чаще всего вы можете увидеть более широкие преимущества от действий по обновлению, чтобы использовать новые функции в Apache Spark, Delta Lake или пользовательских продуктах Azure Databricks.