У нас есть система с различными типами заданий. Назовем их, например:Планирование рабочих мест в DAG-манере
job_1
job_2
job_3
Все они требуют разных наборов параметров (и дополнительных параметров). То есть мы запускаем job_1(x)
для разных x=
A, B, C ...
. job_2
работает для набора параметров, который зависит от результатов job_1(x)
, а также job_2
загружает данные, хранящиеся в job_A(x)
. И так далее.
В результате получается древовидная структура зависимостей. Теперь эти задания иногда терпят неудачу по той или иной причине. Итак, если job_A
для x=B
не удается, ветка дерева полностью завершится и не должна запускаться. Все остальные ветви должны работать.
Все задания написаны на Python и используют параллелизм (на основе нереста SLURM-заданий). Они запланированы с помощью cron. Это, очевидно, не очень и имеет два основных недостатка:
- Очень сложно отлаживать. Все задания запускаются независимо от того, закончилось ли задание выше в дереве или нет. Трудно понять, где проблема без глубокого понимания зависимостей.
- Если более высокое задание (например,
job_A
) не завершеноjob_B
может быть запланировано для запуска и сбой или запуск на основе устаревшей даты.
Для решения этой проблемы мы рассматривали воздушный поток для планирования или визуализации, потому что он написан на Python и, похоже, соответствует нашим потребностям. Я вижу различные проблемы, хотя:
- Дерево зависимостей рабочих мест либо очень общий характер (т.е.
job_B
зависит отjob_A
) или очень широкие (т.е.job_B(y)
за 100 параметров зависит отjob_A(x=A)
визуализированных дерева в первом случае будет. имеют примерно 10 листов, но очень затрудняли бы отладку, потому что работа могла просто потерпеть неудачу для определенного параметра. Визуализированное дерево в последнем случае было бы очень широким и имело бы примерно 300 листьев. Это было бы более точно, но визуализация могла быть сложной читать. Можем ли мы фильтровать неудавшиеся задания и просто смотреть на их зависимости? - У нас есть параллелизм в задании (и нам это нужно, иначе работа r un в течение более одного дня, и мы хотим, чтобы каждый день повторял всю игру), это лишает наше планирование?
- Мы хотим как можно меньше изменить наши рабочие места и управление данными.
- Можем ли мы внедрить систему правил о том, какие рабочие места должны появляться дальше в понятной форме?
Воздушный поток является хорошим выбором для этого? Я понимаю, что есть несколько других (luigi, Azkaban и т. Д.), Которые несколько связаны со стеком Hadoop (который мы не используем, потому что это не большие данные). Сколько требуется взломать? Сколько взломов разумно?