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': ['[email protected]']
    },
    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='[email protected]',
        subject='Daily Sales Report',
        html_content='Sales report attached...'
    )
    
    extract_task >> process_task >> email_task

🎯 进阶提示

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

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

相关推荐
智云软件测评服务1 天前
数字化时代下,软件测试中的渗透测试是如何保障安全的?
渗透·测试·漏洞
试着2 天前
【AI面试准备】XMind拆解业务场景识别AI赋能点
人工智能·面试·测试·xmind
waves浪游3 天前
性能测试工具篇
测试工具·测试用例·bug·测试
艾策第三方软件测评5 天前
软件产品测试报告:如何全面评估及保障软件质量?
测试·软件·评估
转转技术团队9 天前
告别人工搬运!TiDB/MySQL双库同步工具如何为业务提效100%?
mysql·tidb·测试
李菠菜9 天前
JMeter内存配置全平台指南
jmeter·测试
waves浪游9 天前
自动化测试实战篇
测试用例·bug·测试
洞窝技术11 天前
增量代码自动Review工具:洞窝在AI上的探索和实践
jenkins·ai编程·测试
littleplayer11 天前
iOS 单元测试与 UI 测试详解-DeepSeek
前端·单元测试·测试