Задать вопрос
Razgildai
@Razgildai
Изучаю Python...

Как реализовать удаление файлов(директорий) с HDD в рамках работы с dag в airflow?

Доброго времени суток.

Дано:
Сервер с Ubuntu 24.04.2 LTS
Airflow в Docker на данном сервере
К серверу подключен внешний HDD на 2Tb в NTFS

Что требуется:
Реализовать работу dag в Airflow, которая будет удалять n-ые файлы с данного HDD при запуске.

С чем столкнулся:
Проблема с удалением, а если быть точным, то airflow видит директории и файлы в ней, может их прочитать, но при применении shutil.rmtree(path_dir_file) падает с ошибкой что директория не найдена.

Я попробовал уже мне кажется все что смог нагуглить за 3 дня:
- Выдавал права на чтение и удаление с директорией. (сейчас HDD перемонтирован с общими правами)
- В Docker путь примонтирован тоже с условием для чтения и удаления.
- Пробовал удалять файлы с диска с ext4. Результат тот же.
- Пробовал в dag варианты с bash оператором

Уже даже не помню точно что еще делал. Но возможно по незнанию и по отсутствию опыта я пропустил какое нибудь простое решение.

Часть отвечающая за аирфлоу
airflow-webserver:
    container_name: airflow_web
    build: .
    user: "1000:0"
    environment:
      UMASK: "000" 
      AIRFLOW__CORE__UMASK: "000"
      AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow  
      AIRFLOW__CORE__EXECUTOR: LocalExecutor
    volumes:
      - /mnt/sdb1/file_load:/opt/airflow/files:rw,z,delegated,uid=1000,gid=0,cached
    ports:
      - "8081:8080"
    command: |
      bash -c "
      airflow db migrate
      airflow users create --username admin--password admin--firstname admin--lastname admin--role Admin --email admin@example.com || true
      airflow webserver
      "


Может есть какое то другое вообще решения задачи? Реализация не продовая, а просто локальная на своем домашнем сервере для себя, ну и за одно должна была быть практика с Airflow, но видимо не судьба.
  • Вопрос задан
  • 109 просмотров
Подписаться 2 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
Razgildai
@Razgildai Автор вопроса
Изучаю Python...
Вопрос решен.
Смог какое как наладить доступы для удаления файлов.
Правда удалять директории приходиться не с помощь shutil.rmtree(path_dir_file) напрямую, а сначала чистить директорию, и после этого удалять, т.к. начала возникать ошибка о том что директорию удалить не удается, но при этом она удалялась. Связано это я так понял было с тем что скрипт удаляет данные, но информация о удалении слишком долго обновляется на hdd, в итоге python думает что удалить ничего не вышло, но фактически директория была удалена.
Решил это вот таким образом.
for root, dirs, files in os.walk(path_dir_file, topdown=False):
            for file in files:
                try:
                    os.unlink(file)
                    os.sync()  # синхронизируем
                except OSError as e:
                    if not os.path.exists(file):  # проверяем удален ли файл
                        continue
                    raise
            shutil.rmtree(path_dir_file) # только теперь удаляем директорию

Для HDD в /etc/fstab пришлось указать такие параметры
UUID=UUID-HDD /mnt/sdb1 ntfs rw,sync,noatime,relatime,uid=UUID-AIRFLOW,gid=UUID-AIRFLOW,force,dmask=002,fmask=113,nofail 0 0


до этого была эта же настройка, но с ntfs-3g и с ней почему то не работало вообще ни как.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы