Что такое режим списка каталогов автозагрузчика?

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

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

Как работает режим списка каталогов?

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

Например, если файлы передаются каждые 5 минут /some/path/YYYY/MM/DD/HH/fileName, чтобы найти все файлы в этих каталогах, источник файла Apache Spark перечисляет все подкаталоги параллельно. Следующий алгоритм оценивает общее количество вызовов каталога API LIST к хранилищу объектов:

1 (базовый каталог) + 365 (в день) * 24 (в час) = 8761 вызовов

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

Результаты, возвращенные для каждого вызова Хранилище объектов
1000 S3
5000 ADLS 2-го поколения
1024 GCS

Добавочное перечисление (не рекомендуется)

Важно!

Эта функция является устаревшей. Databricks рекомендует использовать режим уведомлений файлов вместо добавочного перечисления.

Примечание.

Доступно в Databricks Runtime 9.1 LTS и более поздних версий.

Добавочный листинг доступен для Azure Data Lake Storage 2-го поколения (abfss://), S3 (s3://) и GCS (gs://).

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

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

Лексическое упорядочение файлов

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

Файлы с несколькими версиями

Delta Lake выполняет фиксации в журналах транзакций таблицы в лексическом порядке.

<path-to-table>/_delta_log/00000000000000000000.json
<path-to-table>/_delta_log/00000000000000000001.json <- guaranteed to be written after version 0
<path-to-table>/_delta_log/00000000000000000002.json <- guaranteed to be written after version 1
...

AWS DMS передает CDC-файлы в AWS S3 под версионным контролем.

database_schema_name/table_name/LOAD00000001.csv
database_schema_name/table_name/LOAD00000002.csv
...

Секционированные по дате файлы

Файлы можно отправлять в формате секционированных дат. Ниже приведены некоторые примеры.

// <base-path>/yyyy/MM/dd/HH:mm:ss-randomString
<base-path>/2021/12/01/10:11:23-b1662ecd-e05e-4bb7-a125-ad81f6e859b4.json
<base-path>/2021/12/01/10:11:23-b9794cf3-3f60-4b8d-ae11-8ea320fad9d1.json
...

// <base-path>/year=yyyy/month=MM/day=dd/hour=HH/minute=mm/randomString
<base-path>/year=2021/month=12/day=04/hour=08/minute=22/442463e5-f6fe-458a-8f69-a06aa970fc69.csv
<base-path>/year=2021/month=12/day=04/hour=08/minute=22/8f00988b-46be-4112-808d-6a35aead0d44.csv <- this may be uploaded before the file above as long as processing happens less frequently than a minute

При отправке файлов с секционированием по дате следует учитывать следующие моменты.

  • Месяцы, дни, часы, минуты должны быть записаны с добавлением нулей для обеспечения лексического порядка (должны отправляться как hour=03, а не hour=3 или 2021/05/03, а не 2021/5/3).
  • Файлы не обязательно должны отправляться в лексическом порядке в самый глубокий каталог, если обработка выполняется реже, чем степень детализации времени родительского каталога.

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

Изменение исходного пути для автозагрузчика

В Databricks Runtime 11.3 LTS и более поздних версиях можно изменить путь ввода каталога для автозагрузчика, настроенного в режиме перечисления каталогов без необходимости выбирать новый каталог проверка point.

Предупреждение

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

Например, если вы хотите выполнить ежедневное задание приема данных, которое загружает все данные из структуры каталогов, упорядоченной по дням, например/YYYYMMDD/, можно использовать одну и ту же проверка point для отслеживания сведений о состоянии приема по другому исходному каталогу каждый день при сохранении сведений о состоянии файлов, принятых из всех ранее используемых исходных каталогов.