airflow定义一个pipeline的例子

直接上代码,然后把对应代码含义标记在注释中

这个 Airflow 的 Python 脚本实际上只是一个将 DAG 的结构指定为代码的配置文件

    #首先,导入需要的库

    #导入DAG对象,我们要用它来实例化一个 DAG
    from airflow import DAG
    #Operators; 我们需要利用这个对象去执行流程!
    from airflow.operators.bash_operator import BashOperator
    from datetime import datetime, timedelta

    #一些默认参数
    default_args = {
        'owner': 'airflow',
        'depends_on_past': False,
        'start_date': datetime(2015, 6, 1),
        'email': ['airflow@example.com'],
        'email_on_failure': False,
        'email_on_retry': False,
        'retries': 1,
        'retry_delay': timedelta(minutes=5),
        # 'queue': 'bash_queue',
        # 'pool': 'backfill',
        # 'priority_weight': 10,
        # 'end_date': datetime(2016, 1, 1),
    }

    #实例化一个DAG
    # tutorial是dag_id,它用作DAG的唯一标识符
    # 将刚才定义的默认参数传给default_args
    # 设置调度间隔,这里设置为每天一次
    dag = DAG('tutorial', default_args=default_args, schedule_interval=timedelta(days=1))

    # t1、t2 和 t3 是通过实例化 Operators 创建的任务示例
    # 在实例化 operator(执行器)时会生成任务。第一个参数task_id充当任务的唯一标识符。

    #任务1,
    # 注意到bash_command是BaseOperator特有的参数,
    # retries是所有的operator 构造函数中都会有的一个参数,不写就是默认值
    t1 = BashOperator(
        task_id='print_date',
        bash_command='date',
        dag=dag)

    #这里retries用3来覆盖了原本的默认值
    t2 = BashOperator(
        task_id='sleep',
        bash_command='sleep 5',
        retries=3,
        dag=dag)

    # 这里用到了jinja,模板中的特殊占位符允许编写类似Python语法的代码。然后传递模板数据以呈现最终文档
    # 双花括号,用于替换
    templated_command = """
        { % for i in range(5) %}
            echo "{{ ds }}"
            echo "{{ macros.ds_add(ds, 7)}}"
            echo "{{ params.my_param }}"
        { % end for %}
    """

    t3 = BashOperator(
        task_id='templated',
        bash_command=templated_command,
        params={'my_param': 'Parameter I passed in'}, #  hook 允许您将参数或对象的字典传递给您的模板
        dag=dag)  

    # 设置依赖关系
    t2.set_upstream(t1) # 这意味着 t2 会在 t1 成功执行之后才会执行
    t3.set_upstream(t1)

说明一:任务参数的优先规则如下

  • 明确传递参数
  • default_args字典中存在的值
  • operator 的默认值(如果存在)

任务必须包含或继承参数task_id和owner,否则 Airflow 将出现异常。

说明二:依赖关系说明

# 这意味着 t2 会在 t1 成功执行之后才会执行
t1.set_downstream(t2)
# 与下面这种写法相等
t2.set_upstream(t1)

# 位移运算符也可用于链式运算
t1 >> t2
# 位移运算符可以链接多个依赖关系,使其变得简洁
t1 >> t2 >> t3

# 下面的这些操作都具有相同的效果:
t1.set_downstream([t2, t3])
t1 >> [t2, t3]
[t2, t3] << t1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值