Airflow Trigger DAG with config

本文介绍了在使用Airflow通过REST API触发DAG时遇到的Run ID冲突问题,即`manual__XXX already exists`异常。分析了异常产生的原因,主要是由于未指定或者执行时间默认精确到秒导致的。提出了三种解决方案:指定唯一的run_id、指定唯一的执行时间execution_date以及设置replace_microseconds为false以增加微秒精度。这些方法旨在确保触发DAG时的唯一性策略,减少重复异常的发生。

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

1. rest api to trigger dag

POST /api/experimental/dags/<DAG_ID>/dag_runs #Creates a dag_run for a given dag id.

curl -X POST \
  http://localhost:8080/api/experimental/dags/<DAG_ID>/dag_runs \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -d '{"conf":"{\"key\":\"value\"}"}'

2. 存在的问题:当连续trigger同一个dag,会发生Run id manual__XXX already exists 异常

error:b'400 BAD REQUEST: [{"error":"Run id manual__2020-10-13T08:53:57+00:00 already exists for dag id your_dag_name"}\n]'

异常产生的原因:

可以通过下面airflow的部分源码可以看出​​:trigger DAG后,run_id可以在trigger DAG时通过rest api的参数指定,如果没有指定,则会通过execution_date生成:run_id = "manual__{0}".format(execution_date.isoformat

### 如何在Apache Airflow中定义和管理DAG #### 定义DAG的基础概念 在Apache Airflow中,DAG(有向无环图)代表一系列按特定顺序执行的任务集合。每个DAG都是Python脚本文件的一部分,在这些文件里可以编写逻辑来控制任务之间的关系以及它们何时应该被执行[^3]。 #### 创建一个新的DAG 为了创建新的DAG,需遵循如下模式: 1. **导入必要的库** 需要先引入`airflow.models.DAG`和其他可能要用到的操作符类。 2. **设置默认参数** 使用字典形式指定一些全局性的属性,比如重试次数、邮箱通知等选项。 3. **实例化DAG对象** 提供唯一的ID名称给这个新构建的对象,并传递之前设定好的默认参数进去。 4. **添加操作符(Operators)** 根据业务需求选择合适类型的操作符并链接起来形成完整的流程链路;常见的几种包括BashOperator, PythonOperator等等。 下面给出一段简单的代码示例展示上述过程: ```python from airflow import DAG from airflow.operators.bash_operator import BashOperator from datetime import timedelta, datetime default_args = { 'owner': 'airflow', 'depends_on_past': False, 'email_on_failure': False, 'email_on_retry': False, 'retries': 1, 'retry_delay': timedelta(minutes=5), } with DAG( dag_id='example_dag', start_date=datetime(2023, 1, 1), schedule_interval="@daily", default_args=default_args, catchup=False ) as dag: t1 = BashOperator(task_id="print_date", bash_command="date") t2 = BashOperator(task_id="sleep", bash_command="sleep 5") t1 >> t2 ``` 这段程序会每天运行一次,首先打印当前日期(`t1`)接着等待五秒钟(`t2`)之后结束整个周期[^1]。 #### 调度与触发机制 一旦完成了DAG的设计开发阶段,则可以通过Web UI界面上直观地查看状态变化情况或者手动启动某次具体执行计划。除此之外还支持基于时间间隔自动循环调用的方式来进行定期维护作业。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值