Настройка Автозагрузчика для рабочих нагрузок
В Databricks рекомендуется следовать рекомендациям по потоковой передаче для запуска Автозагрузчика в рабочей среде.
В Databricks рекомендуется использовать Автозагрузчик в Delta Live Tables для добавочного приема данных. Delta Live Tables расширяет функции Apache Spark Structured Streaming и позволяет использовать всего несколько строк декларативного кода Python или SQL для развертывания конвейера данных производственного качества со следующими возможностями:
- Автомасштабирование вычислительной инфраструктуры для экономии затрат.
- Проверки качества данных с ожиданиями.
- Автоматическая обработка развития схемы.
- Мониторинг с помощью метрик в журнале событий.
Мониторинг автозагрузчика
Запрашивание файлов, обнаруженных Автозагрузчиком
Примечание.
Функция cloud_files_state
доступна в Databricks Runtime 11.3 LTS и выше.
Автозагрузчик предоставляет API SQL для проверки состояния потока. С помощью функции cloud_files_state
можно найти метаданные о файлах, обнаруженных потоком Автозагрузчика. Просто выполните запрос из cloud_files_state
, указав расположение контрольной точки, связанное с потоком Автозагрузчика.
SELECT * FROM cloud_files_state('path/to/checkpoint');
Ожидание потоковой передачи обновлений
Чтобы получить дополнительные возможности для мониторинга потоков Автозагрузчика, Databricks рекомендует использовать интерфейс Streaming Query Listener в Apache Spark.
Автозагрузчик передает метрики в Streaming Query Listener для каждого пакета. Вы можете просмотреть количество файлов в невыполненной работе и объем невыполненной работы на numFilesOutstanding
numBytesOutstanding
вкладке "Необработанные данные " на панели мониторинга хода выполнения потокового запроса:
{
"sources" : [
{
"description" : "CloudFilesSource[/path/to/source]",
"metrics" : {
"numFilesOutstanding" : "238",
"numBytesOutstanding" : "163939124006"
}
}
]
}
В Databricks Runtime 10.4 LTS и более поздних версиях при использовании режима уведомлений о файлах метрики также будут включать приблизительное количество событий файлов, которые находятся в облачной очереди, как approximateQueueSize
для AWS и Azure.
Рекомендации по затратам
При использовании Автозагрузчика основным источником затрат является стоимость вычислительных ресурсов и обнаружения файлов.
Чтобы сократить затраты на вычисление, Databricks рекомендует использовать задания Databricks для планирования автоматической загрузки в качестве пакетных заданий, использующих Trigger.AvailableNow
вместо непрерывного выполнения, если у вас нет низких требований к задержке. См. раздел "Настройка интервалов триггера структурированной потоковой передачи".
Затраты на обнаружение файлов могут быть связаны с операциями вывода списка в ваших учетных записях хранения в режиме листинга каталогов и запросами API в службе подписки, а также службой очередей в режиме уведомлений о файлах. Ниже приведены рекомендации для снижения затрат на обнаружение файлов в Databricks.
- Предоставление триггера
ProcessingTime
при непрерывном выполнении потока Автозагрузчика в режиме листинга каталогов - При возможности архитекторирование файлов отправляется в учетную запись хранения в лексическом порядке для использования добавочного перечисления (не рекомендуется)
- Использование уведомлений о файлах, когда добавочный листинг невозможен
- Использование тегов ресурсов для пометки ресурсов, созданных Автозагрузчиком, с целью отслеживания затрат
Использование Trigger.AvailableNow и ограничения частоты
Примечание.
Доступно в Databricks Runtime 10.4 LTS и более поздних версиях.
Запуск Автозагрузчика в заданиях Databricks можно запланировать в виде пакетного задания с помощью Trigger.AvailableNow
. AvailableNow
Триггер даст Автозагрузчику команду на обработку всех файлов, полученных до времени начала запроса. Новые файлы, отправленные после запуска потока, игнорируются до следующего триггера.
При этом Trigger.AvailableNow
обнаружение файлов выполняется асинхронно с обработкой данных и обработкой данных в нескольких микропакетах с ограничением скорости. По умолчанию автозагрузчик обрабатывает не более 1000 файлов в каждом микропакете. Можно настроить cloudFiles.maxFilesPerTrigger
и cloudFiles.maxBytesPerTrigger
, чтобы указать, сколько файлов или байтов должно обрабатываться в микропакете. Ограничение по файлам является жестким ограничением, а ограничение по байтам — мягким, что означает, что можно обработать больше байтов, чем указано maxBytesPerTrigger
. Если оба параметра предоставляются вместе, автозагрузчик обрабатывает столько файлов, которые необходимы для выполнения одного из ограничений.
Расположение контрольной точки
Databricks рекомендует задать расположение контрольной точки в расположении без политики жизненного цикла облачных объектов. Если файлы в расположении контрольной точки очищаются в соответствии с политикой, состояние потока повреждено. В этом случае необходимо перезапустить поток с нуля.
Хранение событий
Автозагрузчик отслеживает обнаруженные файлы в расположении контрольной точки с помощью RocksDB, чтобы обеспечить гарантии приема данных "только один раз". Databricks настоятельно рекомендует использовать cloudFiles.maxFileAge
параметр для всех потоков приема с большим объемом или длительным приемом. Этот параметр истекает события из расположения контрольной точки, что ускоряет время запуска автозагрузчика. Время запуска может увеличиваться на минуты на выполнение автозагрузчика, что добавляет ненужные затраты, если у вас есть верхняя граница максимального возраста файлов, которые будут храниться в исходном каталоге. Минимальное значение, которое можно задать для cloudFiles.maxFileAge
— "14 days"
. Удаления в RocksDB отображаются в виде записей с отметками полного удаления, поэтому следует ожидать временного увеличения использования хранилища по мере истечения срока действия событий, прежде чем оно начнет выравниваться.
Предупреждение
cloudFiles.maxFileAge
предоставляется в качестве механизма управления затратами для больших наборов данных. Настройка cloudFiles.maxFileAge
слишком агрессивно может вызвать проблемы с качеством данных, такие как дублирование приема или отсутствующие файлы. Таким образом, Databricks рекомендует консервативный параметр cloudFiles.maxFileAge
для таких, как 90 дней, который похож на то, что сопоставимые решения приема данных рекомендуют.
Попытка настроить параметр cloudFiles.maxFileAge
может привести к тому, что необработанные файлы будут игнорироваться Автозагрузчиком, или истечет срок действия уже обработанных файлов, а затем они будут повторно обработаны, что приведет к дублированию данных. Ниже приведены некоторые моменты, которые следует учитывать при выборе cloudFiles.maxFileAge
.
- Если поток перезапускается с длительным интервалом, извлеченные из очереди события уведомлений о файлах, которые старше
cloudFiles.maxFileAge
, будут игнорироваться. Аналогичным образом, если вы используете список каталогов, файлы, которые могли появиться во время простоя, которые старше, чемcloudFiles.maxFileAge
игнорируются. - Если вы используете режим перечисления каталогов и используете
cloudFiles.maxFileAge
, например, установите значение"1 month"
, вы остановите поток и перезапустите поток сcloudFiles.maxFileAge
заданным значением"2 months"
, файлы старше 1 месяца, но более последних 2 месяцев повторно обрабатываются.
Если этот параметр установлен при первом запуске потока, вы не будете принимать данные старше, чем cloudFiles.maxFileAge
, поэтому если вы хотите принимать старые данные, этот параметр не следует задавать при первом запуске потока. Однако этот параметр следует задать при последующих запусках.
Активация регулярных обратных заполнений с помощью cloudFiles.backfillInterval
Автозагрузчик может активировать асинхронные обратные сбои с заданным интервалом, например один день для резервной заполнения один раз в день или одну неделю для резервного заполнения один раз в неделю. Системы уведомлений о событиях файлов не гарантируют 100 % доставки всех отправленных файлов и не предоставляют строгие соглашения об уровне обслуживания по задержке событий файла. В Databricks рекомендуется активировать регулярные обратные заполнения с помощью Автозагрузчика, используя параметр cloudFiles.backfillInterval
, чтобы гарантировать, что все файлы будут обнаружены в рамках данного соглашения об уровне обслуживания, если полнота данных является обязательным условием. Активация регулярных выполнения задним числом не приведет к появлению дубликатов.