运行简单的Airflow BashOperator时出现TemplateNotFound错误

qua*_*ntm 19 python airflow

我正在尝试编写我们的第一个Airflow DAG,当我尝试使用命令列出任务时,我收到以下错误airflow list_tasks orderwarehouse:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/airflow/models.py", line 2038, in resolve_template_files
    setattr(self, attr, env.loader.get_source(env, content)[0])
  File "/usr/local/lib/python2.7/site-packages/jinja2/loaders.py", line 187, in get_source
    raise TemplateNotFound(template)
TemplateNotFound: ./home/deploy/airflow-server/task_scripts/orderwarehouse/load_warehouse_tables.sh
Run Code Online (Sandbox Code Playgroud)

此DAG不应使用模板.我只是按照文档中的说明尝试在指定位置运行shell脚本.shell脚本确实存在于该位置并且拼写正确.我的DAG看起来像这样:

from airflow import DAG
from airflow.operators.bash_operator import BashOperator

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2015, 6, 1),
    'email': ['airflow@airflow.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
    # 'queue': 'bash_queue',
    # 'pool': 'backfill',
    # 'priority_weight': 10,
    # 'end_date': datetime(2016, 1, 1),
}

orderwarehouse = DAG('orderwarehouse', default_args=default_args)

load_mysql = BashOperator(
    task_id='load_warehouse_mysql',
    bash_command='./home/deploy/airflow-server/task_scripts/orderwarehouse/load_warehouse_tables.sh',
    dag=orderwarehouse)
Run Code Online (Sandbox Code Playgroud)

不知道为什么它认为它需要寻找一个Jinja模板.如果有人能指出我误入歧途的地方,那么对这个想法一无所知.谢谢.

Ris*_*rve 33

这是气流的缺陷.在bash_command的末尾添加一个空格,它应该运行正常

资料来源:https: //cwiki.apache.org/confluence/display/AIRFLOW/Common+Pitfalls

  • 现在是 2022 年,该错误仍然存​​在,并且也适用于需要传递 file_path 作为参数的任何地方 (7认同)
  • 现在都2020年了,怎么还有这个bug?我只是花了几个小时来追踪这一点。:( (5认同)
  • 现在已经 2023 年了,bug 仍然存在 (4认同)
  • 发现它也适用于文件名前面的换行符! (2认同)
  • 现在已经 2021 年了,这个 bug 仍然存在 (2认同)

小智 5

除了提供的所有答案之外,我还必须做更多的事情来摆脱 jinja 模板未找到的问题。

我们必须在任务定义中的文件名后添加空格。

在此输入图像描述