Что такое режим списка каталогов автозагрузчика?
Автозагрузчик использует режим перечисления каталогов по умолчанию. В режиме списка каталогов автозагрузчик определяет новые файлы путем вывода перечисления входного каталога. Режим листинга каталога позволяет быстро запускать потоки Автозагрузчика без каких бы то ни было конфигураций разрешений, кроме доступа к данным в облачном хранилище.
Для повышения производительности в режиме перечисления каталогов используйте 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, что значительно сокращает ваши затраты на облачные ресурсы. В следующем table показано количество файлов, возвращаемых каждым вызовом 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
, автозагрузчик автоматически активирует полный каталог list после завершения 7 последовательных добавочных списков. Частоту полных списков каталогов можно контролировать, настроив cloudFiles.backfillInterval
для активации асинхронных обратных заполнений в заданный промежуток времени.
Лексическое упорядочение файлов
Для лексического упорядочения файлов новые передаваемые файлы должны иметь префикс, который лексикографически больше, чем у существующих файлов. Ниже приведены некоторые примеры лексически упорядоченных каталогов.
Файлы с несколькими версиями
Delta Lake фиксирует изменения в журналах транзакций table в лексическом порядке.
<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
). - Файлы не обязательно должны отправляться в лексическом порядке в самый глубокий каталог, если обработка выполняется реже, чем степень детализации времени родительского каталога.
Указанные ниже службы могут отправлять файлы в лексическом порядке с секционированием по дате.
- Фабрика данных Azure может быть настроена на отправку файлов в лексическом порядке. Пример вы можете найти здесь.
- Kinesis Firehose
Изменение исходного пути для автозагрузчика
В Databricks Runtime 11.3 LTS и более поздних версиях можно изменить входной путь каталога для автозагрузчика, настроенного в режиме описания каталогов без having для выбора нового каталога контрольной точки.
Предупреждение
Эта функция не поддерживается для режима уведомлений о файлах. Если используется режим уведомлений о файлах и путь изменен, возможно, не удается обработать файлы, которые уже присутствуют в новом каталоге на момент изменения пути в каталоге update.
Например, если вы хотите выполнить ежедневное задание приема данных, загружающее все данные из структуры каталогов, упорядоченной по дням, например /YYYYMMDD/
, можно использовать одну контрольную точку для отслеживания сведений о состоянии приема в другом исходном каталоге каждый день при сохранении сведений о состоянии файлов, принятых из всех ранее используемых исходных каталогов.