首页 > 解决方案 > Airflow DAGs 任务在我运行 DAG 时未运行,尽管在我测试它们时任务工作正常

问题描述

我在代码中定义了以下 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,我不明白为什么调度程序需要运行以及为什么它不会向我显示一个错误说这是一个问题.

有任何想法吗?

标签: airflowamazon-ecs

解决方案


听起来您没有取消暂停 dag:在 Web UI 的左上角切换 On/Off 开关或使用 cli: airflow unpause <dag_id>


推荐阅读