Подтвердить что ты не робот

Динамический планировщик заданий DAG (направленный ациклический график)

Мне нужно управлять большим рабочим процессом задач ETL, выполнение которых зависит от времени, доступности данных или внешнего события. Некоторые рабочие задания могут завершиться неудачно во время выполнения рабочего процесса, и система должна иметь возможность перезапуска неудачной ветки рабочего процесса, не дожидаясь завершения всего рабочего процесса.

Существуют ли какие-либо фреймворки в python, которые могут справиться с этим?

Я вижу несколько основных функций:

  • Расширение DAG
  • Выполнение узлов (запуск оболочки cmd с ожиданием, ведение журнала и т.д.)
  • Возможность восстановления подграфа в родительской DAG во время выполнения
  • Возможность ручного выполнения узлов или подграфа при запуске родительского графа
  • Приостановить выполнение графика во время ожидания внешнего события
  • Список очередей заданий и заданий

Что-то вроде Oozie, но более общего назначения и в python.

4b9b3361

Ответ 1

1) Вы можете дать dagobah попробовать, как описано на его странице github: Dagobah - это простой планировщик заданий на основе зависимостей, написанный в Python. Дагоба позволяет планировать периодические задания с использованием синтаксиса Cron. Каждое задание затем запускает ряд задач (подпроцессов) в порядке, определенном графиком зависимости, который вы можете легко рисовать с помощью щелчка и перетаскивания в веб-интерфейсе. Это самый легкий проект планировщика по сравнению с тремя последующими.

dagobah's web interface

2) В терминах задач ETL luigi, который открыт с помощью Spotify, больше сосредоточится на заданиях хауопа, как описано: Luigi is модуль Python, который поможет вам построить сложные конвейеры пакетных заданий. Он обрабатывает разрешение зависимостей, управление рабочим процессом, визуализацию и т.д. Он также имеет встроенную поддержку Hadoop.

luigi's web interface

Оба этих модуля в основном написаны на Python, а веб-интерфейсы включены для удобного управления.

Насколько мне известно, "luigi" не предоставляет модуль планировщика для заданий на работу, что, по моему мнению, необходимо для задач ETL. Но с помощью "luigi" проще написать код для сокращения карты в Python, и тысячи задач каждый день при запуске Spotify зависят от него.

3) Как и luigi, Pinterest open получил свой менеджер рабочего процесса с именем Pinball. Архитектура Pinballs следует за мастером-мастером (или с мастер-клиентом, чтобы избежать путаницы имен со специальным типом клиента, который мы вводим ниже) парадигмой, где центральным центральным исполнителем действует как истина о текущем состоянии системы для безстоящих клиентов. И он плавно выполняет задачи hadoop/hive/spark.

pinball's web interface

4) Airflow, еще один проект расписания работы с дагом, открытый Airbnb, совсем похож на Луиджи и Пинбол. Бэкэнд построен на колбе, сельдерее и так далее. В соответствии с примерным кодом задания, Airflow является одновременно мощным и простым в использовании на моей стороне.

airflow's web interface

И последнее, но не менее важное: Luigi, Airflow и Pinball могут быть более широко использованы. И есть большое сравнение среди этих трех: http://bytepawn.com/luigi-airflow-pinball.html

Ответ 3

Вы посмотрели Ruffus?

У меня нет опыта работы с ним, но он, похоже, делает некоторые элементы в вашем списке. Он также выглядит довольно взломанным, поэтому вы можете сами реализовать свои другие требования.