Предотвращение выброса задач Airflow BashOperator «AirflowException: команда Bash не выполнена» - PullRequest
1 голос
/ 22 октября 2019

У меня есть задача Airflow, которая запускается youtube-dl и работает нормально. Я запускаю это с BashOperator:

YOUTUBE_DL_CMD = (
    '/usr/local/bin/youtube-dl -w -i '
    '--max-downloads {{ params.max_downloads }} '
    '--write-info-json "{{ params.playlist_url }}" '
    '-o "{{ params.output }}"'
)

Однако, когда это сделано, это вызывает ошибку из-за "неправильного кода выхода". И, следовательно, помечает мой прогон DAG как неудачный.

Это связано с тем, как инструмент завершает работу после вызова. Вот некоторый вывод об ошибке, которую я вытащил из журнала воздушных потоков. Обратите внимание, что --max-download limit reached, aborting выводится из youtube-dl при успешном выходе.

{{bash_operator.py:128}} INFO - --max-download limit reached, aborting.
{{bash_operator.py:132}} INFO - Command exited with return code 101
{{taskinstance.py:1047}} ERROR - Bash command failed
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/airflow/models/taskinstance.py", line 922, in _run_raw_task
    result = task_copy.execute(context=context)
  File "/usr/local/lib/python3.7/site-packages/airflow/operators/bash_operator.py", line 136, in execute
    raise AirflowException("Bash command failed")
airflow.exceptions.AirflowException: Bash command failed

Есть ли способ предотвратить возникновение этой ошибки в Airflow?

1 Ответ

1 голос
/ 22 октября 2019
  1. Код выхода 101 выглядит как настоящая проблема - https://github.com/ytdl-org/youtube-dl/blob/826dcff99cd0a44ec5fa94f0e0201f5115d097ef/youtube_dl/init.py#L467

  2. Вы можете скрыть youtube_dl код выхода из потока:

YOUTUBE_DL_CMD = (
    '/usr/local/bin/youtube-dl -w -i '
    '--max-downloads {{ params.max_downloads }} '
    '--write-info-json "{{ params.playlist_url }}" '
    '-o "{{ params.output }}" || true'
)
...