大数据调度平台 Airflow(五):Airflow 使用

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

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 基础参数说明:

可以参照:

http://airflow.apache.org/docs/apache-airflow/stable/_api/airflow/models/baseoperator/index.html#module-airflow.models.baseoperator查看baseopartor中更多参数。

  • 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)

复制代码

注意:

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 依赖关系可参照官网:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值