Python DAG 调度指南

在数据工程和任务调度中,DAG(有向无环图)是一个重要的概念。通过 Python,我们可以使用 Airflow 库来实现 DAG 调度。本文将帮助你了解如何创建一个简单的 Python DAG 调度程序,包括具体步骤、代码示例及其含义。

DAG 调度流程

以下是实现 Python DAG 调度的主要步骤:

步骤 描述
1 安装 Airflow 库
2 创建 DAG 文件
3 定义任务
4 设置任务依赖关系
5 启动 Airflow 服务
6 监控 DAG 执行

实现步骤

步骤 1:安装 Airflow 库

首先,你需要安装 Apache Airflow。可以通过以下命令在终端中进行安装:

pip install apache-airflow

这条命令会将 Airflow 库安装到你的 Python 环境中。

步骤 2:创建 DAG 文件

在 Airflow 中,DAG 文件通常保存在特定的目录中。我们在此处创建一个名为 my_dag.py 的文件。

from airflow import DAG
from datetime import datetime

# 创建一个 DAG 对象,并为其设置参数
dag = DAG(
    'my_dag',  # DAG 的名称
    description='A simple DAG',  # DAG 的描述
    schedule_interval='@daily',  # 调度的时间间隔
    start_date=datetime(2023, 1, 1),  # DAG 开始执行的日期
    catchup=False,  # 是否追赶跳过的时间
)

# 打印 DAG 的结构
print(dag)

这部分代码创建了一个基本的 DAG 对象,并设置了一些必要的参数。

步骤 3:定义任务

任务可以是 Python 函数或其他操作。在这里,我们将创建两个简单的任务。

from airflow.operators.python import PythonOperator

def task_1():
    print("Executing task 1")

def task_2():
    print("Executing task 2")

# 定义任务
t1 = PythonOperator(
    task_id='task_1',  # 任务的唯一标识
    python_callable=task_1,  # 需要调用的 Python 函数
    dag=dag,  # 关联的 DAG
)

t2 = PythonOperator(
    task_id='task_2',
    python_callable=task_2,
    dag=dag,
)

步骤 4:设置任务依赖关系

你可以使用 >><< 符号设置任务的依赖关系。在这里,确保 task_1task_2 之前执行。

t1 >> t2  # 设置任务依赖

步骤 5:启动 Airflow 服务

在终端中使用以下命令启动 Airflow:

airflow db init
airflow webserver --port 8080
airflow scheduler

步骤 6:监控 DAG 执行

通过浏览器访问 http://localhost:8080,可以看到我们创建的 DAG,对于每次执行的任务状态进行监控。

序列图

使用 Mermaid 库,生成以下序列图以展示任务执行的顺序:

sequenceDiagram
    participant User
    participant Airflow
    participant Task_1
    participant Task_2

    User->>Airflow: Trigger DAG
    Airflow->>Task_1: Execute task_1
    Task_1->>Airflow: Complete task_1
    Airflow->>Task_2: Execute task_2
    Task_2->>Airflow: Complete task_2

关系图

下面是 DAG 和工作任务之间关系的简化图示:

erDiagram
    DAG ||--o{ Task : contains
    Task ||--|| PythonFunction : executes

总结

通过以上步骤,你已经了解了如何使用 Python 和 Apache Airflow 来调度任务。DAG 的创建过程包括安装、创建 DAG 文件、定义任务、设置依赖关系及启动监控。在实践中,可以扩展 DAG 的复杂性,添加更多任务和依赖关系。希望这些信息能帮助你更好地理解 Python DAG 调度机制,开始你的数据调度之旅!如果有问题,随时欢迎提问。