我正在尝试编写第一个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
此DAG不应使用模板。我只是按照the docs中的说明尝试在指定位置运行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)
不确定为什么它认为需要寻找Jinja模板。如果有人可以指出我误入歧途的地方,那么对这个想法一无所知。感谢。
答案 0 :(得分:23)
这是气流的一个陷阱。在bash_command的末尾添加一个空格,它应该运行正常
来源: https://cwiki.apache.org/confluence/display/AIRFLOW/Common+Pitfalls
答案 1 :(得分:2)
您应该尝试在文件路径末尾使用空格。无论您使用哪个运算符,都应始终遵循相同的规则。
load_mysql = BashOperator(
task_id='load_warehouse_mysql',
command='/home/deploy/airflow-server/task_scripts/orderwarehouse/load_warehouse_tables.sh ',
dag=orderwarehouse)
答案 2 :(得分:0)