Airflow 使用
上文说到使用 Airflow 进行任务调度大体步骤如下:
-
创建 python 文件,根据实际需要,使用不同的 Operator
-
在 python 文件不同的 Operator 中传入具体参数,定义一系列 task
-
在 python 文件中定义 Task 之间的关系,形成 DAG
-
将 python 文件上传执行,调度 DAG,每个 task 会形成一个 Instance
-
使用命令行或者 WEBUI 进行查看和管理
以上 python 文件就是 Airflow python 脚本,使用代码方式指定 DAG 的结构
一、Airflow 调度 Shell 命令
下面我们以调度执行 shell 命令为例,来讲解 Airflow 使用。
1.首先我们需要创建一个 python 文件,导入需要的类库
# 导入 DAG 对象,后面需要实例化DAG对象from airflow import DAG# 导入BashOperator Operators,我们需要利用这个对象去执行流程from airflow.operators.bash import BashOperator
复制代码
注意:以上代码可以在开发工具中创建,但是需要在使用的 python3.7 环境中导入安装 Airflow 包。
D:\ProgramData\Anaconda3\envs\python37\Scripts>pip install apache-airflow==2.1.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
复制代码
2.实例化 DAG
from datetime import datetime, timedelta# default_args中定义一些参数,在实例化DAG时可以使用,使用python dic 格式定义default_args = {'owner': 'airflow', # 拥有者名称'start_date': datetime(2022, 3, 25), # 第一次开始执行的时间,为 UTC 时间'retries': 1, # 失败重试次数'retry_delay': timedelta(minutes=5), # 失败重试间隔}dag = DAG(dag_id = 'myairflow_execute_bash', #DAG id ,必须完全由字母、数字、下划线组成default_args = default_args, #外部定义的 dic 格式的参数schedule_interval = timedelta(days=1) # 定义DAG运行的频率,可以配置天、周、小时、分钟、秒、毫秒)
复制代码
注意:
-
实例化 DAG 有三种方式
第一种方式:
with DAG("my_dag_name") as dag:op=XXOperator(task_id="task")
复制代码
第二种方式(以上采用这种方式):
my_dag = DAG("my_dag_name")op = XXOperator(task_id="task", dag=my_dag)
复制代码
第三种方式:
@dag(start_date=days_ago(2))def generate_dag():op = XXOperator(task_id="task")dag = generate_dag()
复制代码
-
baseoperator 基础参数说明:
可以参照:

-
DAG 参数说明
可以参照:
http://airflow.apache.org/docs/apache-airflow/stable/_api/airflow/models/dag/index.html
查看 DAG 参数说明,也可以直接在开发工具点击 DAG 进入源码看下对应参数有哪些。
3、定义 Task
当实例化 Operator 时会生成 Task 任务,从一个 Operator 中实例化出来对象的过程被称为一个构造方法,每个构造方法中都有“task_id”充当任务的唯一标识符。
下面我们定义三个 Operator,也就是三个 Task,每个 task_id 不能重复。
# operator 支持多种类型, 这里使用 BashOperatorfirst = BashOperator(task_id='first',bash_command='echo "run first task"',dag=dag)middle = BashOperator(task_id='middle',bash_command='echo "run middle task"',dag=dag)last = BashOperator(task_id='last',bash_command='echo "run last task"',dag=dag,retries=3)
复制代码
注意:
-
每个 operator 中可以传入对应的参数,覆盖 DAG 默认的参数,例如:last task 中“retries”=3 就替代了默认的 1。任务参数的优先规则如下:①.显示传递的参数 ②.default_args 字典中存在的值③.operator 的默认值(如果存在)。
-
BashOperator 使用方式参照:http://airflow.apache.org/docs/apache-airflow/stable/howto/operator/bash.html#howto-operator-bashoperator
4、设置 task 依赖关系
#使用 set_upstream、set_downstream 设置依赖关系,不能出现环形链路,否则报错# middle.set_upstream(first) # middle会在first执行完成之后执行# last.set_upstream(middle) # last 会在 middle执行完成之后执行#也可以使用位移符来设置依赖关系first >> middle >>last # first 首先执行,middle次之,last最后# first >> [middle,last] # first首先执行,middle ,last并行执行
复制代码
注意:当执行脚本时,如果在 DAG 中找到一条环形链路(例如:A->B->C-A)会引发异常。更多 DAG task 依赖关系可参照官网:

本文详细介绍了如何使用ApacheAirflow进行任务调度,包括创建DAG、定义Task、设置依赖关系、上传执行脚本、配置调度周期以及任务依赖设置。重点讨论了DAG的start_date、schedule_interval、catchup参数对任务执行的影响,以及如何通过BashOperator执行shell命令。
最低0.47元/天 解锁文章
484

被折叠的 条评论
为什么被折叠?



