Оптимизация производительности с помощью кеширования в Azure Databricks

Azure Databricks использует кеширование дисков для ускорения чтения данных путем создания копий удаленных файлов данных Parquet в локальном хранилище узлов с помощью быстрого промежуточного формата данных. Данные кэшируются автоматически при получении файла из удаленного расположения. Последующие операции чтения одного набора данных затем выполняются локально, что значительно увеличивает скорость чтения. Кеш работает для всех файлов данных Parquet (включая таблицы Delta Lake).

Примечание.

В хранилищах SQL и Databricks Runtime 14.2 и более поздних CACHE SELECT версиях команда игнорируется. Вместо этого используется расширенный алгоритм кэширования дисков.

Разностный кэш переименован в кэш диска

Кэширование дисков в Azure Databricks ранее называлось разностным кэшем и кэшем DBIO. Поведение при кэшировании дисков определяется собственной функцией Azure Databricks. Это название изменено для того, чтобы эту функцию не воспринимали по ошибке как часть протокола Delta Lake.

Кэш дисков и кэш Spark

Кеш дисков Azure Databricks отличается от кеширования Apache Spark. Azure Databricks рекомендует использовать автоматическое кэширование дисков.

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

Функция Кеш диска Кэш Apache Spark
Хранение Локальные файлы в рабочем узле. Блоки в памяти с зависимостью от уровня хранилища.
Применено к Таблице Parquet, хранящейся в ABFS и других файловых системах. Любой кадр данных или RDD.
Активируемые Автоматически при первой операции чтения (если включено кэширование). Вручную, требует изменения кода.
Вычисляется Неактивно. Неактивно.
Availability Можно включить или отключить с помощью флагов конфигурации, по умолчанию включенных для определенных типов узлов. Доступна всегда.
Вытесняется Автоматически в режиме LRU или при любом изменении файла, вручную при перезапуске кластера. Автоматически в режиме LRU, вручную с использованием unpersist.

Согласованность кеша диска

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

Выбор типов экземпляров для использования кэширования дисков

Рекомендуемым (и самым простым) способом использования кеширования диска является выбор типа рабочей роли с объемами твердотельных накопителей при настройке кластера. Такие рабочие узлы включены и настроены для кеширования диска.

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

Настройка кеша диска

Azure Databricks рекомендует выбрать для кластеров типы экземпляров рабочих узлов с ускорением кэширования. Такие экземпляры автоматически оптимально настраиваются для кеша диска.

Примечание.

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

Настройка использования диска

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

  • spark.databricks.io.cache.maxDiskUsage: дисковое пространство на узел, зарезервированное для кэшированных данных в байтах;
  • spark.databricks.io.cache.maxMetaDataCache: дисковое пространство на узел, зарезервированное для кэшированных метаданных в байтах;
  • spark.databricks.io.cache.compression.enabled: следует ли хранить кэшированные данные в сжатом формате.

Пример конфигурации:

spark.databricks.io.cache.maxDiskUsage 50g
spark.databricks.io.cache.maxMetaDataCache 1g
spark.databricks.io.cache.compression.enabled false

Включение или отключение кеша диска

Чтобы включить и отключить кеш диска, выполните:

spark.conf.set("spark.databricks.io.cache.enabled", "[true | false]")

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