Прекратите работу Azure конвейер фабрики данных, когда он еще работает - PullRequest
0 голосов
/ 02 мая 2020

У меня есть Azure Data Factory Pipeline. Мой триггер был установлен на каждые 5 минут. Иногда мой конвейер занимает более 5 минут, чтобы закончить свою работу. В этом случае Trigger запускается снова и создает другой экземпляр моего конвейера, а два экземпляра одного и того же конвейера создают проблемы в моем ETL. Как я могу быть уверен, что одновременно работает только один экземпляр моего конвейера?

enter image description here

Как вы можете видеть, есть несколько примеров работы моих конвейеров

enter image description here

Ответы [ 4 ]

3 голосов
/ 03 мая 2020

Несколько вариантов, которые я мог бы придумать:

OPT 1

Укажите 5-минутное время ожидания для ваших операций конвейера:

https://docs.microsoft.com/en-us/azure/data-factory/concepts-pipelines-activities https://docs.microsoft.com/en-us/azure/data-factory/concepts-pipelines-activities#activity -полиция

OPT 2

1) Создать столбец из 1 строки 1 sql Таблица RunStatus: 1 будет нашим «завершенным», 0 - «запущенным» состоянием

2) В конце вашего конвейера добавьте действие хранимой процедуры, которое установит бит в 1.

3) В начало вашего конвейера добавьте поиск активности, чтобы прочитать этот бит.

4) Выходные данные этого поиска будут использоваться в случае, если условие действия:

  • если 1 - запустить работу конвейера, но перед этим добавьте еще одно действие хранимой процедуры, чтобы задать наш бит состояния в 0.
  • , если 0 - в зависимости от деталей вашего проекта: ничего не делать, добавить операцию ожидания, отправить электронное письмо и т. д. c.

Чтобы полностью использовать эту опцию, вы можете превратить таблицу в журнал, где новая строка с временем начала и окончания будет добавляться после каждого успешного запуска (перед началом нового запуска, Вы можете проверить, было ли время предыдущего прогона временем окончания). Наличие этого журнала может помочь вам собрать данные о том, сколько нужно для запуска конвейера и, возможно, либо добавить больше ресурсов, либо увеличить интервал между запусками.

OPT 3

Контролировать работу конвейера с помощью SDK (еще не пробовал, так что это просто может вас направить): https://docs.microsoft.com/en-us/azure/data-factory/monitor-programmatically

Надеюсь, вы сможете использовать хотя бы один из них

1 голос
/ 06 мая 2020

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

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

1 голос
/ 04 мая 2020

Моя первая мысль - это повторение при таких обстоятельствах слишком часто. Если график, которым вы поделились, предназначен для одного и того же конвейера, то для большинства из них требуется около 5 минут, но у некоторых есть 30, 40 и даже 60 минут. Ситуации, подобные этой, когда простой повторяющийся триггер, вероятно, недостаточен. Что должно произойти, пока работает 60 минут? Будет 10-12 запусков, которые не запустятся: поэтому они все еще должны запускаться или их можно игнорировать?

Чтобы убедиться, что все конвейеры работают и управляют параллелизмом, вам понадобится построить менеджер очередей какой-то. ADF не может справиться с этим сам, поэтому я создал такую ​​систему внутренне и очень на нее полагаюсь. Я использую комбинацию приложений Logi c, хранимых процедур (Azure SQL) и Azure функций, чтобы ставить в очередь, выполнять и контролировать конвейерные выполнения. Ниже приведено подробное описание того, что вам, вероятно, необходимо:

  1. Logi c Приложение 1: запускается каждые 5 минут и ставит в очередь задание ADF в базе данных SQL.

  2. Logi c Приложение 2: запускается каждые 2-3 минуты и проверяет очередь, чтобы убедиться, что: a) в данный момент не выполняется задание (status = 'InProgress') и 2) это работа в очереди, ожидающая выполнения (я делаю это с помощью хранимой процедуры). ЕСЛИ это состояние выполнено: выполните следующий АПД и обновите его состояние до «InProgress».

    • Я использую функцию Azure для отправки заданий вместо встроенного в Logi c действия приложения, поскольку У меня есть лучший контроль над переменными параметрами. Кроме того, они могут вернуть только что созданный ADI RunId, который я использую в # 3.
  3. Logi c Приложение 3: запускается каждую минуту и ​​обновляет статус любого ' Задания InProgress.

    • Я использую функцию Azure для проверки состояния конвейера ADF на основе RunId.
0 голосов
/ 05 мая 2020

Попробуйте изменить параллелизм конвейера на 1.

Ссылка: https://www.datastackpros.com/2020/05/prevent-azure-data-factory-from-running.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...