UzunDemir / airflow_hw

Airflow home work from Skillbox ds-intro volum 33

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

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

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

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

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

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

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

Я как обычно запустил контейнер в 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, посвящается эта легендарная композиция. Вы действительно стали сильнее!

About

Airflow home work from Skillbox ds-intro volum 33


Languages

Language:Python 99.9%Language:Shell 0.1%