Ошибка Bash Operator: нет такого файла или каталога в потоке - PullRequest
0 голосов
/ 01 ноября 2018

Я новичок в Airflow и борюсь с BashOperator. Я хочу получить доступ к сценарию оболочки, используя bash operatory в моем dag.py.

Я проверил: Как запустить файл сценария bash в Airflow а также BashOperator не запускает bash-файл apache airflow

о том, как получить доступ к сценарию оболочки через оператор bash.

Вот что я сделал:

 cmd = "./myfirstdag/dag/lib/script.sh "

        t_1 = BashOperator(
            task_id='start',
            bash_command=cmd
        )

При запуске моего рецепта и проверке потока воздуха я получил следующую ошибку:

[2018-11-01 10:44:05,078] {bash_operator.py:77} INFO - /tmp/airflowtmp7VmPci/startUDmFWW: line 1: ./myfirstdag/dag/lib/script.sh: No such file or directory
[2018-11-01 10:44:05,082] {bash_operator.py:80} INFO - Command exited with return code 127
[2018-11-01 10:44:05,083] {models.py:1361} ERROR - Bash command failed

Не уверен, почему это происходит. Любая помощь будет оценена.

Спасибо!

РЕДАКТИРОВАТЬ ПРИМЕЧАНИЕ: я предполагаю, что он ищет в некотором местоположении воздушного потока, а не пути, который я указал. Но как мне заставить его искать правильный путь.

Ответы [ 3 ]

0 голосов
/ 02 ноября 2018

Попробуйте следующее. Он должен иметь полный путь к файлу Bash.

cmd = "/home/notebook/work/myfirstdag/dag/lib/script.sh "

t_1 = BashOperator(
    task_id='start',
    bash_command=cmd
)
0 голосов
/ 22 мая 2019

Для тех, кто работает с версией докера.

У меня была такая же проблема, мне потребовалось некоторое время, чтобы осознать проблему, поведение может быть другим с докером. Когда группа обеспечения доступности баз данных запускается, она перемещает свой tmp-файл, если на докере нет потока воздуха, он находится на той же машине. с моей версией докера он перемещает его в другой контейнер для запуска, который, конечно, при запуске не будет иметь файл сценария.

внимательно проверьте журналы задач, вы увидите, как это происходит до запуска задачи. Это также может зависеть от настроек док-станции.

0 голосов
/ 01 ноября 2018

Вы уверены в пути, который вы определили?

cmd = "./myfirstdag/dag/lib/script.sh "

С заголовком . это означает, что он относительно пути, по которому вы выполняете свою команду.

Не могли бы вы попробовать это?

cmd = "find . -type f"
...