gpt4 book ai didi

python - Airflow BashOperator 不起作用,但 PythonOperator 可以

转载 作者:IT王子 更新时间:2023-10-29 01:12:35 28 4
gpt4 key购买 nike

我似乎对 BashOperator 有疑问。我在 Miniconda 环境(Python 3.6)中使用安装在 CentOS 上的 Airflow 1.10,使用的是 Conda Forge 上的软件包。

当我运行 airflow test tutorial pyHi 2018-01-01 时,输出是“Hello world!”正如预期的那样。

但是,当我运行 airflow test tutorial print_date 2018-01-01 Airflow 测试教程模板化 2018-01-01 没有任何反应。

这是 Linux shell 输出:

(etl) [root@VIRT02 airflow]# airflow 测试教程 sleep 2015-06-01
[2018-09-28 19:56:09,727] {__init__.py:51} 信息 - 使用执行器 SequentialExecutor
[2018-09-28 19:56:09,962] {models.py:258} 信息 - 从/root/airflow/dags 中填充 DagBag

我的DAG配置文件,是基于Airflow tutorial , 如下图所示。

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)

最佳答案

从技术上讲,并不是 BashOperator 不起作用,只是您没有在 Airflow 日志中看到 Bash 命令的标准输出。这是一个已知问题,并且已经在 Airflow 的问题跟踪器上提交了一张票:https://issues.apache.org/jira/browse/AIRFLOW-2674

BashOperator 确实有效的证据是,如果您运行 sleep 运算符

airflow test tutorial sleep 2018-01-01

您必须等待 5 秒才能终止,这是您期望 Bash sleep 命令的行为。

关于python - Airflow BashOperator 不起作用,但 PythonOperator 可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52606062/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com