Apache Airflow (四) :Airflow 调度shell命令

编程入门 行业动态 更新时间:2024-10-14 20:21:13

Apache Airflow (四) :Airflow 调度shell<a href=https://www.elefans.com/category/jswz/34/1771323.html style=命令"/>

Apache Airflow (四) :Airflow 调度shell命令

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客

 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。

 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频


上文说到使用Airflow进行任务调度大体步骤如下:

  1. 创建python文件,根据实际需要,使用不同的Operator
  2. 在python文件不同的Operator中传入具体参数,定义一系列task
  3. 在python文件中定义Task之间的关系,形成DAG
  4. 将python文件上传执行,调度DAG,每个task会形成一个Instance
  5. 使用命令行或者WEBUI进行查看和管理

以上python文件就是Airflow python脚本,使用代码方式指定DAG的结构。

下面我们以调度执行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 

2. 实例化DAG

from datetime import datetime, timedelta# default_args中定义一些参数,在实例化DAG时可以使用,使用python dic 格式定义
default_args = {'owner': 'airflow', # 拥有者名称'start_date': datetime(2021, 9, 4),  # 第一次开始执行的时间,为 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基础参数说明:

可以参照:

.html#module-airflow.models.baseoperator查看baseopartor中更多参数。

  • DAG参数说明

可以参照:

.html 查看DAG参数说明,也可以直接在开发工具点击DAG进入源码看下对应参数有哪些。

3. 定义Task

当实例化Operator时会生成Task任务,从一个Operator中实例化出来对象的过程被称为一个构造方法,每个构造方法中都有“task_id”充当任务的唯一标识符。

下面我们定义三个Operator,也就是三个Task,每个task_id 不能重复。

# operator 支持多种类型, 这里使用 BashOperator
first = 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使用方式参照:.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依赖关系可参照官网:.html#task-dependencies

5. 上传python配置脚本

到目前为止,python配置如下:

# 导入 DAG 对象,后面需要实例化DAG对象
from airflow import DAG# 导入BashOperator Operators,我们需要利用这个对象去执行流程
from airflow.example_dags.example_bash_operator import dagfrom airflow.operators.bash import BashOperatorfrom datetime import datetime, timedelta# default_args中定义一些参数,在实例化DAG时可以使用,使用python dic 格式定义
default_args = {'owner': 'airflow', # 拥有者名称'start_date': datetime(2021, 9, 4),  # 第一次开始执行的时间,为 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运行的频率,可以配置天、周、小时、分钟、秒、毫秒
)# operator 支持多种类型, 这里使用 BashOperator
first = 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
)#使用 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并行执行

将以上python配置文件上传到$AIRFLOW_HOME/dags目录下,默认$AIRFLOW_HOME为安装节点的“/root/airflow”目录,当前目录下的dags目录需要手动创建。

6. 重启Airflow

“ps aux|grep webserver”和“ps aux|grep scheduler”找到对应的airflow进程杀掉,重新启动Airflow。重启之后,可以在airflow webui看到对应的DAG ID ”myairflow_execute_bash”。

7. 执行airflow

按照如下步骤执行DAG,首先打开工作流,然后“Trigger DAG”执行,随后可以看到任务执行成功。

查看task执行日志:


更多推荐

Apache Airflow (四) :Airflow 调度shell命令

本文发布于:2023-11-15 10:51:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1598436.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:命令   Apache   Airflow   shell

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!