Настройка Автозагрузчика для рабочих нагрузок

В 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 для каждого пакета. Вы можете просмотреть количество файлов в невыполненной работе и объем невыполненной работы на numFilesOutstandingnumBytesOutstandingвкладке "Необработанные данные " на панели мониторинга хода выполнения потокового запроса:

{
  "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.

Использование Trigger.AvailableNow и ограничения частоты

Примечание.

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

Запуск Автозагрузчика в заданиях Databricks можно запланировать в виде пакетного задания с помощью Trigger.AvailableNow. AvailableNowТриггер даст Автозагрузчику команду на обработку всех файлов, полученных до времени начала запроса. Новые файлы, отправленные после запуска потока, игнорируются до следующего триггера.

При этом Trigger.AvailableNowобнаружение файлов выполняется асинхронно с обработкой данных и обработкой данных в нескольких микропакетах с ограничением скорости. По умолчанию автозагрузчик обрабатывает не более 1000 файлов в каждом микропакете. Можно настроить cloudFiles.maxFilesPerTrigger и cloudFiles.maxBytesPerTrigger, чтобы указать, сколько файлов или байтов должно обрабатываться в микропакете. Ограничение по файлам является жестким ограничением, а ограничение по байтам — мягким, что означает, что можно обработать больше байтов, чем указано maxBytesPerTrigger. Если оба параметра предоставляются вместе, автозагрузчик обрабатывает столько файлов, которые необходимы для выполнения одного из ограничений.

Хранение событий

Автозагрузчик отслеживает обнаруженные файлы в расположении контрольной точки с помощью RocksDB, чтобы обеспечить гарантии приема данных "только один раз". Databricks настоятельно рекомендует использовать cloudFiles.maxFileAge параметр для всех потоков приема с большим объемом или длительным приемом. Этот параметр истекает события из расположения проверка point, что ускоряет время запуска автозагрузчика. Время запуска может увеличиваться на минуты на выполнение автозагрузчика, что добавляет ненужные затраты, если у вас есть верхняя граница максимального возраста файлов, которые будут храниться в исходном каталоге. Минимальное значение, которое можно задать для 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, чтобы гарантировать, что все файлы будут обнаружены в рамках данного соглашения об уровне обслуживания, если полнота данных является обязательным условием. Активация регулярных выполнения задним числом не приведет к появлению дубликатов.