Несколько BashOperator в Airflow не распознает текущую папку - PullRequest
0 голосов
/ 02 марта 2019

Я использую Airflow, чтобы проверить, могу ли я выполнить ту же работу для загрузки данных, первоначальная загрузка завершается в два этапа в оболочке:

  1. cd ~ / bm3
  2. ./bm3.py runjob -p projectid -j jobid

В Airflow у меня есть две задачи с BashOperator:

task1 = BashOperator(
    task_id='switch2BMhome',
    bash_command="cd /home/pchoix/bm3",
    dag=dag)

task2 = BashOperator(
    task_id='kickoff_bm3',
    bash_command="./bm3.py runjob -p client1 -j ingestion",
    dag=dag)

task1 >> task2

Задача1 завершена, как и ожидалось, войдите ниже:

[2019-03-01 16:50:17,638] {bash_operator.py:100} INFO - Temporary script location: /tmp/airflowtmpkla8w_xd/switch2ALhomeelbcfbxb
[2019-03-01 16:50:17,638] {bash_operator.py:110} INFO - Running command: cd /home/rxie/al2

задача 2 завершилась неудачно по причине, указанной в журнале:

[2019-03-01 16:51:19,896] {bash_operator.py:100} INFO - Temporary script location: /tmp/airflowtmp328cvywu/kickoff_al2710f17lm
[2019-03-01 16:51:19,896] {bash_operator.py:110} INFO - Running command: ./bm32.py runjob -p client1 -j ingestion
[2019-03-01 16:51:19,902] {bash_operator.py:119} INFO - Output:
[2019-03-01 16:51:19,903] {bash_operator.py:123} INFO - /tmp/airflowtmp328cvywu/kickoff_al2710f17lm: line 1: ./bm3.py: No such file or directory

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

Как мне запустить команду bash из определенного места?

Любая мысль очень ценится, если вы можете поделиться здесь.

Большое спасибо.

ОБНОВЛЕНИЕ:Спасибо за предложение, которое почти работает.

Во-первых, bash_command="cd /home/pchoix/bm3 && ./bm3.py runjob -p client1 -j ingestion", отлично работает, однако в runjob есть несколько задач, первая задача работает, а вторая задача вызывает impala-shell.pyчтобы запустить что-то, impala-shell.py указывает python2 в качестве своего интерпретатора lanВ то время как вне его, другие части используют python 3.

Это нормально, когда я просто запускаю команду bash_command в оболочке, но в Airflow, по неизвестной причине, несмотря на то, что я установил правильный PATH и убедился в оболочке:

(base) (venv) [pchoix@hadoop02 ~]$ python
Python 2.6.6 (r266:84292, Jan 22 2014, 09:42:36)

Задача все еще выполняется в Python 3 и использует Python 3, что видно из журнала:

[2019-03-01 21:42:08,040] {bash_operator.py:123} INFO -   File "/data/cloudera/parcels/CDH-5.12.0-1.cdh5.12.0.p0.29/bin/../lib/impala-shell/impala_shell.py", line 220
[2019-03-01 21:42:08,040] {bash_operator.py:123} INFO -     print '\tNo options available.'
[2019-03-01 21:42:08,040] {bash_operator.py:123} INFO -                                   ^
[2019-03-01 21:42:08,040] {bash_operator.py:123} INFO - SyntaxError: Missing parentheses in call to 'print'

Обратите внимание, что этой проблемы не существует, когда я запускаю заданиев оболочке:

./bm3.py runjob -p client1 -j ingestion

1 Ответ

0 голосов
/ 02 марта 2019

Как насчет:

task = BashOperator(
    task_id='switch2BMhome',
    bash_command="cd /home/pchoix/bm3 && ./bm3.py runjob -p client1 -j ingestion",
    dag=dag)
...