Воздушный поток BashOperator не работает, но PythonOperator работает - PullRequest
0 голосов
/ 02 октября 2018

У меня, похоже, проблема с BashOperator.Я использую Airflow 1.10, установленный на CentOS в среде Miniconda (Python 3.6), используя пакет в Conda Forge.

Когда я запускаю airflow test tutorial pyHi 2018-01-01, вывод «Hello world!»как и ожидалось.

Однако, когда я запускаю airflow test tutorial print_date 2018-01-01 или airflow test tutorial templated 2018-01-01, ничего не происходит.

Это вывод оболочки Linux:

(etl) [root@VIRT02 airflow]# airflow test tutorial sleep 2015-06-01 [2018-09-28 19:56:09,727] {__init__.py:51} INFO - Using executor SequentialExecutor [2018-09-28 19:56:09,962] {models.py:258} INFO - Filling up the DagBag from /root/airflow/dags

Файл конфигурации моей группы DAG, основанный на учебном пособии Airflow , показан ниже.

from airfl ow import DAG
from airflow.operators.bash_operator import BashOperator
from airflow.operators.python_operator import PythonOperator
from datetime import datetime, timedelta

import test

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2010, 1, 1),
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}

dag = DAG(
    'tutorial',
    'My first attempt',
    schedule_interval=timedelta(days=1),
    default_args=default_args,
)

# t1, t2 and t3 are examples of tasks created by instantiating operators
t1 = BashOperator(
    task_id='print_date',
    bash_command='date',
    dag=dag)

t2 = BashOperator(
    task_id='sleep',
    bash_command='sleep 5',
    retries=3,
    dag=dag)

templated_command = """
    {% for i in range(5) %}
        echo "{{ ds }}"
        echo "{{ macros.ds_add(ds, 7)}}"
        echo "{{ params.my_param }}"
    {% endfor %}
"""

t3 = BashOperator(
    task_id='templated',
    bash_command=templated_command,
    params={'my_param': 'Parameter I passed in'},
    dag=dag)

t4 = BashOperator(
    task_id='hi',
    bash_command = 'test.sh',
    dag=dag,
)

t5 = PythonOperator(
    task_id='pyHi',
    python_callable=test.main,
    dag=dag,
)


t2.set_upstream(t1)
t3.set_upstream(t1)

1 Ответ

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

Технически это не значит, что BashOperator не работает, просто вы не видите стандартный вывод команды Bash в журналах Airflow.Это известная проблема, и заявка уже была подана на систему отслеживания проблем Airflow: https://issues.apache.org/jira/browse/AIRFLOW-2674

Доказательством того, что BashOperator работает, является то, что если вы запускаете оператор sleep с помощью

airflow test tutorial sleep 2018-01-01

вам придется подождать 5 секунд, прежде чем он завершится, что вы ожидаете от команды Bash sleep.

...