Airflow,一个很强大的自动化工作流python库

自动化工作流 - Airflow基础:让你的数据任务井井有条

今天要和大家聊一个特别酷的数据工程利器 - Airflow 。还在为复杂的数据处理任务头疼吗?用Excel做数据分析的过程烦琐又容易出错?来看看如何用Airflow把这些任务编排成一个优雅的自动化工作流吧!

一、初识Airflow:你的数据流水线管家

想象一下,Airflow就像一个尽职尽责的工厂管理员,它帮你安排和监督每一个生产环节,确保所有任务按部就班地完成。首先,让我们来安装这位得力助手:

csharp 复制代码
# 使用pip安装airflow
pip install apache-airflow

# 初始化airflow数据库
airflow db init

📌 小贴士:建议在虚拟环境中安装Airflow,避免依赖冲突:

bash 复制代码
python -m venv airflow_env
source airflow_env/bin/activate  # Linux/Mac
.\airflow_env\Scripts\activate   # Windows

二、DAG:工作流的设计图

在Airflow中,我们用DAG(有向无环图)来描述任务之间的依赖关系。就像是在画一张任务流程图,告诉Airflow:"嘿,先做这个,再做那个"。

ini 复制代码
from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime, timedelta

# 定义默认参数
default_args = {
    'owner': 'your_name',
    'start_date': datetime(2024, 1, 1),
    'retries': 1,
    'retry_delay': timedelta(minutes=5)
}

# 创建DAG
with DAG(
    'my_first_dag',
    default_args=default_args,
    schedule_interval='@daily'  # 每天执行一次
) as dag:
    
    # 定义具体任务
    def task1_function():
        print("开始处理数据...")
    
    def task2_function():
        print("数据处理完成!")
    
    task1 = PythonOperator(
        task_id='task1',
        python_callable=task1_function
    )
    
    task2 = PythonOperator(
        task_id='task2',
        python_callable=task2_function
    )
    
    # 设置任务依赖关系
    task1 >> task2  # task1执行完后再执行task2

⚠️ 注意事项:DAG名称必须是唯一的,且不能包含空格。

三、Operators:任务的具体执行者

Airflow提供了多种Operators(算子),就像不同岗位的工人,各司其职:

ini 复制代码
# 1. Python操作
from airflow.operators.python import PythonOperator

# 2. Bash命令执行
from airflow.operators.bash import BashOperator

# 3. 数据库操作
from airflow.providers.postgres.operators.postgres import PostgresOperator

# 实际案例:数据处理工作流
with DAG('data_processing', default_args=default_args, schedule_interval='@daily') as dag:
    
    # 执行Shell命令下载数据
    download_data = BashOperator(
        task_id='download_data',
        bash_command='wget https://example.com/data.csv -O /tmp/data.csv'
    )
    
    # Python处理数据
    def process_data():
        import pandas as pd
        df = pd.read_csv('/tmp/data.csv')
        # 数据处理逻辑...
        df.to_sql('processed_data', engine)
    
    process_task = PythonOperator(
        task_id='process_data',
        python_callable=process_data
    )
    
    # 设置执行顺序
    download_data >> process_task

🌟 实用技巧 :使用XCom在任务间传递数据:

python 复制代码
def push_data(**context):
    context['task_instance'].xcom_push(key='data_key', value='some_value')

def pull_data(**context):
    value = context['task_instance'].xcom_pull(key='data_key')
    print(f"接收到的数据: {value}")

四、实战案例:每日销售数据处理流水线

让我们来实现一个实用的数据处理工作流:

ini 复制代码
from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.operators.email import EmailOperator
import pandas as pd
import datetime

def extract_sales_data():
    # 读取销售数据
    df = pd.read_excel('daily_sales.xlsx')
    return df.to_dict()

def process_sales_data(**context):
    # 获取上一步的数据
    sales_data = context['task_instance'].xcom_pull(task_ids='extract_data')
    # 处理数据逻辑...
    total_sales = sum(item['amount'] for item in sales_data)
    return {'total_sales': total_sales}

with DAG(
    'sales_pipeline',
    default_args={
        'owner': 'data_team',
        'start_date': datetime(2024, 1, 1),
        'email': ['your_email@example.com']
    },
    schedule_interval='0 1 * * *'  # 每天凌晨1点执行
) as dag:

    extract_task = PythonOperator(
        task_id='extract_data',
        python_callable=extract_sales_data
    )
    
    process_task = PythonOperator(
        task_id='process_data',
        python_callable=process_sales_data
    )
    
    email_task = EmailOperator(
        task_id='send_report',
        to='manager@example.com',
        subject='Daily Sales Report',
        html_content='Sales report attached...'
    )
    
    extract_task >> process_task >> email_task

🎯 进阶提示

  • 开发时先使用airflow test命令测试单个任务
  • 合理使用schedule_interval设置任务调度周期
  • 注意处理任务失败的重试机制

测试新人可以学习《测试人的 Python 工具书》书籍《性能测试 JMeter 实战》书籍

相关推荐
念越21 小时前
第十七届蓝桥杯软件测试模拟赛1期题目及解析
蓝桥杯·测试用例·测试
独断万古他化3 天前
软件测试新纪元:为什么选择AI测试
人工智能·ai·测试
CoovallyAIHub4 天前
Django 大佬亲授:8 个 Coding Agent 工程模式,重新定义程序员价值
程序员·测试·代码规范
甜甜圈圈子4 天前
从工具到思维,AI 如何重塑软件测试全流程?
测试
小罗和阿泽5 天前
测试系列之接口测试 (一)概念测试的有关概念
测试
Kind6 天前
解决 UnixBench 在 x86-64-v1 CPU 上 Whetstone 报错 (Illegal Instruction) 的问题
测试
H_unique7 天前
博客接口自动化测试--搭建测试环境&库的介绍&安装allure
python·pytest·测试
bluceli8 天前
前端测试实战指南:构建高质量代码的完整体系
前端·测试
埋头编程~9 天前
【测试报告】网页端博客系统
功能测试·压力测试·性能测试·测试
0和1的舞者9 天前
高并发论坛系统:单元测试 + 接口自动化 + 性能测试 + CI/CD 全链路测试报告
java·测试开发·测试工具·jmeter·pytest·测试·测试报告