【发布时间】:2020-08-01 22:06:33
【问题描述】:
我在代码中定义了以下 DAG:
from datetime import timedelta, datetime
import airflow
from airflow import DAG
from airflow.operators.docker_operator import DockerOperator
from airflow.contrib.operators.ecs_operator import ECSOperator
default_args = {
'owner': 'airflow',
'retries': 1,
'retry_delay': timedelta(minutes=5),
'start_date': datetime(2018, 9, 24, 10, 00, 00)
}
dag = DAG(
'data-push',
default_args=default_args,
schedule_interval='0 0 * * 1,4',
)
colors = ['blue', 'red', 'yellow']
for color in colors:
ECSOperator(dag=dag,
task_id='data-push-for-%s' % (color),
task_definition= 'generic-push-colors',
cluster= 'MY_ECS_CLUSTER_ARN',
launch_type= 'FARGATE',
overrides={
'containerOverrides': [
{
'name': 'push-colors-container',
'command': [color]
}
]
},
region_name='us-east-1',
network_configuration={
'awsvpcConfiguration': {
'securityGroups': ['MY_SG'],
'subnets': ['MY_SUBNET'],
'assignPublicIp': "ENABLED"
}
},
)
这应该会创建一个包含 3 个任务的 DAG,每个任务对应我的颜色列表中的每种颜色。
这看起来不错,当我运行时:
airflow list_dags
我看到我的 dag 列出来了:
data-push
当我跑步时:
airflow list_tasks data-push
我看到我的三项任务按应有的方式显示:
data-push-for-blue
data-push-for-red
data-push-for-yellow
然后我通过在终端中输入以下内容来测试运行我的一项任务:
airflow run data-push data-push-for-blue 2017-1-23
这会运行任务,我可以看到它出现在我的 ECS 集群中的 aws 仪表板上,所以我知道任务在我的 ECS 集群上运行并且数据被成功推送并且一切都很好。
现在,当我尝试从 Airflow UI 运行 DAG 数据推送时,我遇到了问题。
我跑:
airflow initdb
接着是:
airflow webserver
现在进入 localhost:8080 的气流 UI。
我在 dag 列表中看到 dag 数据推送,单击它,然后要测试运行整个 dag,我单击“触发 DAG”按钮。我没有添加任何配置 json,然后单击“触发器”。然后,DAG 的树视图在树结构的右侧显示一个绿色圆圈,似乎表明 DAG 正在“运行”。但是绿色圆圈只是在那里停留了很长时间,当我手动检查我的 ECS 仪表板时,我发现没有实际运行的任务,因此在从 Airflow UI 触发 DAG 后没有发生任何事情,尽管当我从 CLI 手动运行它们时这些任务正在工作。
如果这很重要,我正在使用 SequentialExecutor。
关于为什么在从 CLI 运行单个任务时触发 DAG 不起作用,我的两个主要理论是,也许我在定义 dag 的 python 代码中遗漏了一些东西(可能是因为我没有指定任何依赖项任务?)或者我没有运行气流调度程序,但如果我从气流用户界面手动触发 DAGS,我不明白为什么调度程序需要运行,为什么它不会向我显示这样的错误是个问题。
有什么想法吗?
【问题讨论】:
标签: airflow amazon-ecs