Бренный путь первого DAGa

По мотивам практического задания из модуля 33.Airflow курса Machine Learning Engineer платформы Skillbox

Image alt

Репозиторий практического задания модуля 33.Airflow на GitHub

Изучая видеоурок по модулю “33.Airflow” от Skillbox, термин DAG вызвал у меня улыбку. “Да уж, даги нынче не те” - подумал я про себя, вспоминая уроженцев Дагестана, которым я, пользуясь случаем, передаю пламенный “СЕЛЯМ!”.

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

image Дорога без начала и конца (Картина, сгенерированная ресурсом Midjorney. Больше картин в моем телеграм канале)

Вначале все было очень даже неплохо. Несмотря на многочисленные предупреждения коллег в телеграмм-канале курса, что учебные модули 31-33 очень тяжелые, мне удалось прямо таки с ходу сделать 31 и 32 практические задания. Подумалось, что точно также я преодолею и 33 модуль. Обучающий материал я просмотрел и с успехом установил Docker и запустил первый учебный контейнер. Дальше я приступил к выполнению практической работы.

Итак, я скачал и распаковал архив airflow_hw. Папку __MACOSX можно смело удалить, она вам не понадобится, так как является визиткой, что этот архив был создан на MAC. Дополнить файлы pipeline.py и predict.py в Pycharm я смог достаточно быстро, получив небольшую корректировку от своего куратора. И вот уже у меня обучается модель, записывается и определяются предикты по всем тестовым данным, которые также записываются в папку. Оставалось, то же самое повторить в airflow. Контейнер я запустил в Docker, о котором я планирую написать отдельную статью (он того заслуживает).

Я как обычно запустил контейнер в Docker:

image

С первого раза конечно же DAG не появился:

image

Но воспользовавшись советом, который разместил коллега Dim-Dim

image

я просто перенес папку modules с рабочими файлами в папку проекта \airflow_hw\dags и тогда мой DAG без проблем обнаружил себя в Airflow! Как вы видите, в процессе изучения я еще добавил парочку своих шагов: my, welcome. Не обращайте на них внимания.

image

Это конечно же нарушало условия задачи, структура проекта должна была быть такой:

image

но поверьте, это не такая срашная проблема, позже я вам покажу как добавить в контейнер папки, которые он будет видеть. Большую проблему для меня доставил вопрос указания верного пути, для того, чтобы заработали файлы pipeline.py и predict.py. А пока, мой DAG упорно не запускался и выдавал такую ошибку:

FileNotFoundError: [Errno 2] No such file or directory: ‘C:/Users/HP Z2/airflow_hw/data/train/homework.csv’

Вот борьба с этой ошибкой заняла больше всего времени!

Многочисленные поиски по нашему уважаемому телеграмм-каналу, мучения Dim-Dim, и конечно же ознакомление с официальной документацией airflow я тут же пробовал для нахождения верного пути для того чтобы DAG увидел эти файлы. Необходимо также отметить поддержку вот этих ребят (@Stas_the_company и @eugix), которые подкидывали мне идеи для решения этой проблемы. Так например, @eugix предположил, что DAG не находит пути потому что в моем - есть папки с пробелами

(C:\Users\HP Z2\airflow_hw\dags).

Я проверил это, НАЛИЧИЕ ПРОБЕЛА В ИМЕНИ НЕ ВЛИЯЕТ НА ПРОБЛЕМУ ПУТИ. Но все же, вы лучше придерживаетесь правил и если вы только начинаете проект, то создавайте папки и файлы без пробелов. (Мне такой user HP Z2 достался в месте с компьютером). Я по разному прописывал пути. И относительные и абсолютные - ничего не помогало. Потом просто перекинул папку data в папку dags и все заработало!

image

image

На всякий случай, возьмите себе на заметку, что рабочий путь в airflow всегда примерно такой

/opt/airflow/<папкИ внутри вашего проекта!>,

к примеру у меня был такой (это когда я их в dags поместил): /opt/airflow/dags/data/models/

Но я задался вопросом, как же все таки сделать так чтобы папка data была видна в контейнере. Как войти в контейнер (наряду с установкой airflow) вы найдете в самом задании или здесь

Я вошел в контейнер и попробовал там создать нужные папки:

image

И вот вывод, папки можно создавать, но контейнер airflow по прежнему их не будет видеть! Еще немного размышлений и изысканий привели меня к тому, что папки можно задать в файле airflow.cfg, и это действительно так, но как открывать этот файл из контейнера я пока не нашел (если вами это известно, пожалуйста, научите и меня). И вот, после многих часов проб и ошибок меня осенило, что указание доступных папок может быть и в самом начале создания проекта airflow, то есть в файле docker-compose.yml. Действительно! Это так и есть! Открываем docker-compose.yml в блокноте

image

Добавляем недостающие для нашего проекта папки:

volumes:

  • ${AIRFLOW_PROJ_DIR:-.}/dags:/opt/airflow/dags

    • ${AIRFLOW_PROJ_DIR:-.}/logs:/opt/airflow/logs

    • ${AIRFLOW_PROJ_DIR:-.}/plugins:/opt/airflow/plugins

    • ${AIRFLOW_PROJ_DIR:-.}/modules:/

    • ${AIRFLOW_PROJ_DIR:-.}/data:/models

    • ${AIRFLOW_PROJ_DIR:-.}/data:/predictions

    …..

    и так далее, если есть вложенные папки, тоже их укажите

Вот и все, после этого мой DAG заработал согласно тех условиям, которые были в задании, то есть структура папок проекта была сохранена!

Вот результат работы DAG:

airflow

Ну и на последок, всем прошедшим модуль 33_Airflow, посвящается эта легендарная композиция. Вы действительно стали сильнее!

Written on February 17, 2023
  • Возврат на главную страницу