Перейти к основному содержимому

Планировщик заданий

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

Планировщик позволяет выполнять команды dbt в пользовательской платформе данных как на основе cron, так и по событиям. В частности, он обрабатывает:

  • Выполнение заданий dbt Cloud на основе cron, которые запускаются с заранее определенной периодичностью
  • Выполнение заданий dbt Cloud по событиям, которые запускаются на основе завершения другого задания (триггер по завершению задания)
  • Выполнение заданий dbt Cloud CI по событиям, которые запускаются при слиянии pull-запроса в ветку (merge jobs)
  • Выполнение заданий dbt Cloud по событиям, вызванным через API
  • Выполнение заданий dbt Cloud по событиям, вручную запущенным пользователем с помощью Run now

Планировщик обрабатывает различные задачи, включая постановку заданий в очередь, создание временных сред для выполнения необходимых команд dbt, предоставление журналов для отладки и устранения неполадок, а также хранение артефактов dbt для прямого потребления/загрузки через Discovery API.

Планировщик обеспечивает выполнение dbt в промежуточных и производственных средах, облегчая и повышая уверенность в рабочих процессах CI/CD и позволяя наблюдаемость и управление при развертывании dbt в масштабе.

Термины планировщика

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

ТерминОпределение
ПланировщикДвижок dbt Cloud, который обеспечивает выполнение заданий. Планировщик ставит в очередь запланированные или вызванные через API запуски заданий, подготавливает среду для выполнения команд заданий в вашей облачной платформе данных и хранит и предоставляет журналы и артефакты, которые являются побочными продуктами выполнения.
ЗаданиеНабор шагов выполнения, настроек и триггера для вызова команд dbt против проекта в облачной платформе данных пользователя.
Очередь заданийОчередь заданий действует как зона ожидания для запусков заданий, когда они запланированы или вызваны для выполнения; запуски остаются в очереди до начала выполнения. Более конкретно, Планировщик проверяет очередь на наличие запусков, которые должны быть выполнены, убеждается, что запуск может быть начат, а затем подготавливает среду с соответствующими настройками, учетными данными и командами для начала выполнения. Как только выполнение начинается, запуск покидает очередь.
Перепланированное заданиеСитуация, когда продолжительность выполнения задания, запланированного по cron, становится больше, чем частота расписания задания, что приводит к росту очереди заданий быстрее, чем планировщик может обработать запуски задания.
Деактивированное заданиеСитуация, когда задание достигло 100 последовательных неудачных запусков.
Время подготовкиВремя, которое dbt Cloud затрачивает на создание кратковременной среды для выполнения команд задания в облачной платформе данных пользователя. Время подготовки наиболее значительно варьируется в начале часа, когда Планировщик dbt Cloud испытывает большой трафик запусков.
ЗапускОдин, уникальный запуск задания dbt.
Слот запускаСлоты запуска контролируют количество заданий, которые могут выполняться одновременно. Планы для разработчиков имеют фиксированное количество слотов запуска, в то время как корпоративные и командные планы имеют неограниченное количество слотов запуска. Каждое выполняемое задание занимает слот запуска на время выполнения.

Командные и разработческие планы ограничены одним проектом каждый. Для дополнительных проектов рассмотрите возможность перехода на корпоративный план.
ПотокиКогда dbt строит DAG проекта, он пытается параллелизировать выполнение, используя потоки. Количество потоков — это максимальное количество путей через DAG, над которыми dbt может работать одновременно. По умолчанию количество потоков в задании равно 4.
Время ожиданияВремя, которое dbt Cloud ждет перед запуском задания, либо из-за отсутствия доступных слотов, либо из-за того, что предыдущий запуск того же задания все еще выполняется.

Очередь планировщика

Планировщик ставит в очередь задание на развертывание для обработки, когда оно запускается по расписанию, по завершению задания, вызовом API или вручную.

Перед началом выполнения задания планировщик проверяет следующие условия, чтобы определить, может ли запуск начаться:

  • Есть ли доступный слот запуска в учетной записи? — Если все слоты запуска заняты, запланированный запуск будет ожидать. Время ожидания отображается в dbt Cloud. Если время ожидания длительное, переход на корпоративный план может предоставить больше слотов запуска и позволить более высокую параллельность заданий.

  • Есть ли у этого же задания уже выполняющийся запуск? — Планировщик выполняет отдельные запуски одного и того же задания dbt Cloud последовательно, чтобы избежать конфликтов при сборке моделей. Если задание уже выполняется, запланированное задание будет ожидать, и время ожидания будет отображаться в dbt Cloud.

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

Обзор выполнения задания dbt CloudОбзор выполнения задания dbt Cloud

Обработка CI заданий

По сравнению с заданиями на развертывание, планировщик ведет себя иначе при обработке заданий непрерывной интеграции (CI). Он ставит в очередь CI задание для обработки, когда оно запускается pull-запросом Git, и условия, которые планировщик проверяет, чтобы определить, может ли запуск начаться, также отличаются:

  • Будет ли CI запуск потреблять слот запуска? — CI запуски не потребляют слоты запуска и никогда не блокируют производственные запуски.
  • Есть ли у этого же задания уже выполняющийся запуск? — CI запуски могут выполняться одновременно (параллельно). CI запуски строятся в уникальные временные схемы, и проверки CI выполняются параллельно, чтобы повысить производительность команды. Коллегам никогда не нужно ждать, чтобы получить проверку CI.

Обработка merge заданий

Когда задание запускается слиянием pull-запроса Git, планировщик ставит в очередь merge задание для обработки.

  • Будет ли merge задание потреблять слот запуска? — Да, merge задания потребляют слоты запуска.
  • Есть ли у этого же задания уже выполняющийся запуск? — Merge задание может иметь только один выполняющийся запуск одновременно. Если в очереди несколько запусков, планировщик поставит в очередь самый последний запуск и отменит все остальные. Если есть выполняющийся запуск, он будет ждать его завершения перед постановкой в очередь следующего запуска.

Память задания

В dbt Cloud настройка для выделения памяти, доступной для задания, определяется на уровне учетной записи и применяется к каждому заданию, выполняемому в учетной записи; лимит памяти не может быть настроен для каждого задания отдельно. Если выполняющееся задание достигает своего лимита памяти, запуск завершается с сообщением об ошибке "memory limit error".

Задания потребляют много памяти в следующих ситуациях:

  • Указано высокое количество потоков
  • Пользовательские макросы dbt пытаются загрузить данные в память вместо того, чтобы передать вычисления на облачную платформу данных
  • Наличие задания, которое генерирует документацию проекта dbt для большого и сложного проекта dbt.
    • Чтобы предотвратить проблемы с нехваткой памяти, мы рекомендуем генерировать документацию в отдельном задании, выделенном для этой задачи, и удалять dbt docs generate из всех других заданий. Это особенно важно для больших и сложных проектов.

Обратитесь к архитектуре dbt Cloud для диаграммы архитектуры и чтобы узнать, как данные перемещаются.

Отмена запусков для перепланированных заданий

Планировщик не будет отменять задания, вызванные через API

Планировщик не будет отменять перепланированные задания, вызванные через API.

Планировщик dbt Cloud предотвращает засорение очереди слишком большим количеством запусков заданий, отменяя ненужные. Если задание занимает больше времени на выполнение, чем его запланированная частота, очередь будет расти быстрее, чем планировщик может обработать запуски, что приведет к постоянно расширяющейся очереди с запусками, которые не нужно обрабатывать (называемыми перепланированными заданиями).

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

Отмененные запуски отображают сообщение об ошибке, объясняющее, почему запуск был отменен, и рекомендацииОтмененные запуски отображают сообщение об ошибке, объясняющее, почему запуск был отменен, и рекомендации

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

Деактивация заданий beta

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

Чтобы реактивировать деактивированное задание, вы можете:

  • Обновить настройки задания, чтобы исправить проблему, и сохранить задание (рекомендуется)
  • Выполнить ручной запуск, нажав Run now на странице задания

Пример баннера деактивации на странице задания:

Пример баннера деактивации на странице заданияПример баннера деактивации на странице задания

Часто задаваемые вопросы

Я получаю ошибку 'Этот запуск превысил лимиты памяти вашего аккаунта' в моей неудавшейся задаче

Связанные документы

0