AirFlow 如何传参数给DAG

本文介绍了如何通过AirFlow的API和命令行传递参数给DAG。内容涉及GET方法获取DAG信息,POST方法运行DAG并传入自定义参数,以及在DAG中如何获取这些参数。提供了API交互的两种方式和命令行启动DAG的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题外话(可以直接跳过进入正题):

    最近需要使用airflow去调度任务,平常使用airflow都是调度的定时任务,这次不需要定时任务,只需要条件满足时主动触发airflow执行任务调度即可,同时将任务必要的外界参数传给DAG。查了好多资料发现都没有介绍如何将参数传给DAG的,于是就去看airflow文档,找到了使用命令行可以将参数传给DAG。但这种方式不适合我的任务需求,我需要调用airflow的API去触发airflow执行,可是官方文档中这块介绍的很少很少。也请教了一些人,得到的结果是airflow可能不支持自定义的参数传入。那怎么办呢?难道只能改源码?不科学呀,命令行支持,API怎么会不支持呢?于是本着不行就改源码的想法查看,一路查下去最后发现API和命令行调用的是同一个方法(trigger_dag),既然是同一个方法,肯定支持啊,于是有重新看了一下文档和源码,终于找到了二者之间的联系,哈哈哈,搞定~~

目录

1、通过API与AirFlow交互

(1)  GET方法获取指定下的指定信息

(2)  POST方法运行指定的

2、通过命令行启动DAG时传参


1、通过API与AirFlow交互

AirFlow提供了两种API交互方式:

(1)  GET方法获取指定<DAG_ID>下的指定<TASK_ID>信息

http://<WEBSERVER>:<PORT>/api/experimental/dags/<DAG_ID>/tasks/<TASK_ID>   #returns info for a task (GE
<think>我们正在为Airflow 3.0.2创建一个示例DAG,其中需要指定任务队列为"airflow2"。 在Airflow中,我们可以通过设置任务的`queue`参数来指定任务在特定的队列中运行。 首先,我们需要确保在Airflow配置中已经定义了名为"airflow2"的队列。这通常在`airflow.cfg`文件中配置,或者在环境变量中设置。 然后,在DAG文件中,我们可以为每个任务指定`queue`参数。 下面是一个简单的示例DAG,它包含两个任务: 1. 一个打印日期的任务(BashOperator) 2. 一个睡眠5秒的任务(BashOperator) 我们将为这两个任务设置队列为"airflow2"。 注意:在Airflow中,默认的队列是"default",所以如果我们要使用"airflow2",需要确保CeleryExecutor(或其他执行器)配置了该队列,并且有worker监听该队列。 另外,我们使用PythonOperator来演示如何设置队列,但实际上任何操作符都可以设置队列。 以下是示例代码:</think>以下是一个适用于 Airflow 3.0.2 的示例 DAG,其中任务队列设置为 `airflow2`: ```python from datetime import datetime, timedelta from airflow import DAG from airflow.operators.bash import BashOperator default_args = { 'owner': 'airflow', 'depends_on_past': False, 'start_date': datetime(2023, 1, 1), 'email_on_failure': False, 'email_on_retry': False, 'retries': 1, 'retry_delay': timedelta(minutes=5), 'queue': 'airflow2' # 设置默认队列为airflow2 } with DAG( 'example_queue_dag', default_args=default_args, description='示例DAG展示队列设置', schedule_interval=timedelta(days=1), catchup=False, tags=['example', 'queue'] ) as dag: # 任务1 - 使用默认队列(继承DAG级别的airflow2设置) task1 = BashOperator( task_id='print_date', bash_command='date', ) # 任务2 - 显式指定队列(覆盖默认设置) task2 = BashOperator( task_id='sleep_task', bash_command='sleep 5', queue='airflow2', # 显式指定队列 ) # 任务3 - 使用PythonOperator演示队列设置 task3 = BashOperator( task_id='final_task', bash_command='echo "任务完成"', queue='airflow2', ) task1 >> task2 >> task3 ``` ### 关键配置说明: 1. **队列设置位置**: - 在 `default_args` 中设置 `'queue': 'airflow2'` 可使所有任务默认使用该队列 - 在单个任务中通过 `queue='airflow2'` 参数覆盖默认设置 2. **前置要求**: ```bash # 启动监听airflow2队列的worker airflow celery worker --queues airflow2 -D ``` 3. **配置文件要求**(`airflow.cfg`): ```ini [celery] worker_concurrency = 4 default_queue = default # 确保有airflow2队列定义 ``` ### 验证方法: 1. 将DAG文件放入 `$AIRFLOW_HOME/dags` 目录 2. 触发DAG执行: ```bash airflow dags trigger example_queue_dag ``` 3. 在Web UI查看任务执行详情: - 任务详情页的 "Queue" 字段应显示 `airflow2` - Worker日志应包含 `Processing example_queue_dag.<task_id>` 信息 > **重要提示**:实际部署前需确保: > 1. CeleryExecutor 已正确配置 > 2. 存在监听 `airflow2` 队列的worker进程 > 3. 队列名称在 `airflow.cfg` 的 `[celery]` 部分定义[^1][^2]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值