AirFlow简介

大数据调度平台 Airflow(二):Airflow 架构及原理 Airflow 我们可以构建 Workflow 工作流,工作流使用 DAG 有向无环图来表示,DAG 指定了任务之间的关系,如下图:Airflow 架构图如下:Airflow 在运行时有很多守护进程,这些进程提供了 airflow 全部功能,守护进程包括如下:webserver:WebServer 服务器可以接收 HTTP 请求,用于提供用户界面的操作窗口,主要负责中止、恢复、触发任务;监控任务;断点续跑任务;查询任务状态、详细日志等。 阅读详情

1, 简介

​ Airflow是一个可编程,调度和监控的工作流平台,基于有向无环图(DAG),airflow可以定义一组有依赖的任务,按照依赖依次执行。airflow提供了丰富的命令行工具用于系统管控,而其web管理界面同样也可以方便的管控调度任务,并且对任务运行状态进行实时监控,方便了系统的运维和管理。

2,执行器(Executor)

​ Airflow本身是一个综合平台,它兼容多种组件,所以在使用的时候有多种方案可以选择。比如最关键的执行器就有四种选择:

SequentialExecutor:单进程顺序执行任务,默认执行器,通常只用于测试

LocalExecutor:多进程本地执行任务

CeleryExecutor:分布式调度,生产常用

DaskExecutor :动态任务调度,主要用于数据分析

在当前项目使用CeleryExecutor作为执行器。

celery是一个分布式调度框架,其本身无队列功能,需要使用第三方组件,比如redis或者rabbitmq,当前项目使用的是rabbitmq,系统整体结构如下所示:

其中:

turing为外部系统

GDags服务帮助拼接成dag

master节点webui管理dags、日志等信息

scheduler负责调度,只支持单节点

worker负责执行具体dag中的task, worker支持多节点

在整个调度系统中,节点之间的传递介质是消息,而消息的本质内容是执行脚本的命令,也就是说,工作节点的dag文件必须和master节点的dag文件保持一致,不然任务的执行会出问题。

3,任务处理器

airflow内置了丰富的任务处理器,用于实现不同类型的任务:

BashOperator : 执行bash命令

PythonOperator : 调用python代码

EmailOperator : 发送邮件

HTTPOperator : 发送 HTTP 请求

SqlOperator : 执行 SQL 命令

除了这些基本的构建块之外,还有更多的特定处理器:DockerOperator,HiveOperator,S3FileTransferOperator,PrestoToMysqlOperator,SlackOperator ...

在当前项目使用了HTTPOperator作为执行器,用于调用JAVA服务,整体结构图如下:

关于airflow的环境搭建可以参考另外一篇博客: https://www.cnblogs.com/cord/p/9226608.html

4,基本使用

4.1,常用命令

$ airflow webserver -D       守护进程运行webserver
$ airflow scheduler -D       守护进程运行调度器
$ airflow worker -D          守护进程运行调度器
$ airflow worker -c 1 -D     守护进程运行celery worker并指定任务并发数为1
$ airflow pause dag_id      暂停任务
$ airflow unpause dag_id     取消暂停,等同于在管理界面打开off按钮
$ airflow list_tasks dag_id  查看task列表
$ airflow clear dag_id       清空任务实例
$ airflow trigger_dag dag_id -r RUN_ID -e EXEC_DATE  运行整个dag文件
$ airflow run dag_id task_id execution_date       运行task

4.2,web管控界面的使用

启动web管控界面需要执行airflow webserver -D命令,默认访问端口是8080

http://110.55.63.51:8080/admin/

(1) 任务启动暂停开关

(2) 任务运行状态

(3) 待执行,未分发的任务

(4) 手动触发执行任务

(5) 任务管控界面

选择对应dag栏目,点击(5) Graph View即可进入任务管控界面

点击对应的任务,会弹出一个任务管控台,主要几个功能如下:

View Log : 查看任务日志

Run : 运行选中任务

Clear:清空任务队列

Mark Success : 标记任务为成功状态

4.3 通过定义DAG文件实现创建定时任务

1) 普通任务

from datetime import timedelta, datetime
import airflow
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from airflow.operators.dummy_operator import DummyOperator

default_args = { #默认参数
    'owner': 'jifeng.si', #dag拥有者,用于权限管控
    'depends_on_past': False,  #是否依赖上游任务
    'start_date': datetime(2018, 5, 2), #任务开始时间,默认utc时间
    'email': ['123456789@qq.com'], #告警通知邮箱地址
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}

dag = DAG(
    'example_hello_world_dag',  #dag的id
    default_args=default_args,
    description='my first DAG', #描述
    schedule_interval='*/25 * * * *', # crontab
    start_date=datetime(2018, 5, 28) #开始时间,覆盖默认参数
)

def print_hello():
    return 'Hello world!'

dummy_operator = DummyOperator(task_id='dummy_task', dag=dag)

hello_operator = BashOperator(   #通过BashOperator定义执行bash命令的任务
    task_id='sleep_task',
    depends_on_past=False,
    bash_command='echo `date` >> /home/py/test.txt',
    dag=dag
)

dummy_operator >> hello_operator #设置任务依赖关系
#dummy_operator.set_downstream(hello_operator)

2) 定义http任务并使用本地时间

import os
from datetime import timedelta, datetime
import pytz
from airflow.operators.http_operator import SimpleHttpOperator
from airflow.models import DAG

default_args = {
    'owner': 'cord',
    # 'depends_on_past': False,
    'depends_on_past': True,
    'wait_for_downstream': True,
    'execution_timeout': timedelta(minutes=3),
    'email': ['123456789@qq.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}

#将本地时间转换为utc时间,再设置为start_date
tz = pytz.timezone('Asia/Shanghai')
dt = datetime(2018, 7, 26, 12, 20, tzinfo=tz)
utc_dt = dt.astimezone(pytz.utc).replace(tzinfo=None)

os.environ['AIRFLOW_CONN_HTTP_TEST']='http://localhost:9090'

dag = DAG(
    'bm01',
    default_args=default_args,
    description='my DAG',
    schedule_interval='*/2 * * * *',
    start_date=utc_dt
)

#通过SimpleHttpOperator定义http任务
task1 = SimpleHttpOperator(
    task_id='get_op1',
    http_conn_id='http_test',
    method='GET',
    endpoint='test1',
    data={},
    headers={},
    dag=dag)

task2 = SimpleHttpOperator(
    task_id='get_op2',
    http_conn_id='http_test',
    method='GET',
    endpoint='test2',
    data={},
    headers={},
    dag=dag)

task1 >> task2

4.4 crontab语法

crontab格式如下所示:

# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │                                       7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * *  command to execute
域是否必须取值范围可用特殊符号备注
MinutesYes0–59* , - 
HoursYes0–23* , - 
Day of monthYes1–31* , - ? L W? L W部分实现可用
MonthYes1–12 or JAN–DEC* , - 
Day of weekYes0–6 or SUN–SAT* , - ? L #? L W 部分实现可用
YearNo1970–2099* , -标准实现里无这一项

特殊符号功能说明:

逗号(,)
​ 逗号用于分隔一个列表里的元素,比如 "MON,WED,FRI" 在第五域(day of week)表示Mondays, Wednesdays and Fridays。

连字符(-)
​ 连字符用于表示范围,比如2000–2010表示2000到2010之间的每年,包括这两年(闭区间)。

百分号(%)
​ 用于命令(command)中的格式化

L
​ 表示last,最后一个,比如第五域,5L表示当月最后一个星期五

W
​ W表示weekday(Monday-Friday),指离指定日期附近的工作日,比如第三域设置为15L ,这表示临近当月15附近的工作日,假如15号是星期六,那么定时器会在14号执行,如果15号是星期天,那么定时器会在16号执行,也就是说只会在离指定日期最近的那天执行。

井号#
​ #用于第五域(day of week),#后面跟着一个1~5之间的数字,这个用于表示第几个星期,比如5#3表示第三个星期五

?
​ 在有些实现里面,?与*的功能相同,还有一些实现里面?表示cron的启动时间,比如 当cron服务在8:25am启动,则? ? * * * *会更新为25 8 * * * *, 直到下一次cron服务重新启动,定时器会再次更新。

/
​ /一般与*组合使用,后面跟着一个数字,表示频率,比如在第一域(Minutes)中*/5表示每5分钟,是普通列表表示5,10,15,20,25,30,35,40,45,50,55,00的缩写

参考链接:
https://segmentfault.com/a/1190000012803744?utm_source=tuicool&utm_medium=referral

https://en.wikipedia.org/wiki/Cron

转载地址:https://www.cnblogs.com/cord/p/9450910.html

Airflow中的队列与任务调度 Airflow中的队列是Celery执行器(Executor)的一个概念,用于将任务分发到不同的工作节点(worker)。通过队列,Airflow可以根据任务的性质和优先级,将任务分配到最适合的worker上,从而优化资源使用和任务执行效率。使用Airflow的队列功能可以大大提高任务调度的灵活性和效率。本文展示了如何在Airflow中配置和使用队列,并通过一个实际的例子说明了如何将任务绑定到特定队列,从而实现精细化的资源管理。如果你有类似的需求或遇到其他关于Airflow的问题,欢迎在评论区留言交流。 阅读详情

相关推荐

Airflow调度工具简介和使用

Airflow是airbnb家的基于DAG(有向无环图)的任务管理系统, 最简单的理解就是一个高级版的crontab。它解决了crontab无法解决的任务依赖问题。 本文将介绍 Airflow 这一款优秀的调度工具。主要包括 Airflow 的服务构成、Airflow 的 Web 界面、DAG 配置、常用配置等。 一、什么是 Airflow Airflow 是 Airbnb 开源的一个用 Python 编写的调度工具。于 2014 年启动,2015 年春季开源,2016 年加入 Apache 软件基金会的孵

清平乐的技术专栏 1394

Airflow实战--通过REST API来为任务传递参数1

Airflow实战–通过REST API来为任务传递参数1 本文介绍如何通过REST API来给任务传递参数。在实际应用中任务的参数传递非常重要,因为根据不同的参数任务会执行不同的逻辑。所以,参数传递是一个任务调度系统必须具备的基本功能。本文就来研究一下如何通过airflow的REST API来为任务传递参数。 基于airflow-2.2.1。 Airflow的参数传递 前面的文章已经分析过,可以通过两种方式来对airflow中的任务进行参数传递,一种是通过xcom机制,一种是通过共享变量。如何利用这两种方

zg_hover的专栏 4249

详细教程:如何使用elasticsearch 8.x进行向量搜索

大模型的热度使得向量数据库和embedding也成了ai领域的热门话题,有别于从头开始训练一个大模型或基于基础模型进行微调的方式,embedding检索相关上下文是对大模型进行定制的各种方法中成本最低、技术实现最便捷的方式。从技术实现的角度,

qq_50790981的博客 1万+

airflow的参数

来源[https://airflow.apache.org/code.html?highlight=ds_nodash#api-reference](https://airflow.apache.org/code.html?highlight=ds_nodash#api-reference) Default Variables Variable Description {{ d...

月明 6280

R语言绘图中文显示全攻略:从乱码到完美适配

本文详细解析了R语言绘图中的中文显示问题,从乱码根源到完美适配方案。通过showtext、sysfonts和extrafont等工具包的应用,提供跨平台的中文显示解决方案,涵盖ggplot2图表、PDF/PNG输出及Shiny应用等场景,助力用户高效实现R绘图中文完美呈现。

hp777的博客 258

水下探测小白必看:单波束vs多波束声呐,5分钟搞懂核心区别

本文为水下探测新手清晰解析了单波束与多波束声呐的核心区别。单波束声呐如同精准的“手电筒”,进行逐点扫描,适用于定点测深和目标探测;而多波束声呐则像“聚光灯”,能一次性覆盖一个扇区,高效获取海底地形三维信息,是海底测绘和水下三维建模的理想选择。文章通过生动的比喻和对比表格,帮助读者快速理解两者原理、效率差异及适用场景。

linux6sysadmin的博客 1047

Airflow简介

1、什么是Airflow Airflow 是一个 Airbnb 的 Workflow 开源项目,使用Python编写实现的任务管理、调度、监控工作流平台。Airflow 是基于DAG(有向无环图)的任务管理系统,可以简单理解为是高级版的crontab,但是它解决了crontab无法解决的任务依赖问题。与crontab相比Airflow可以方便查看任务的执行状况(执行是否成功、执行时间、执行依 赖等),可追踪任务历史执行情况,任务执行失败时可以收到邮件通知,查看错误日志。 2、Airflow与同类产品的

fighting 3万+

C# 操作Excel的时候,出现"被呼叫方拒绝接受呼叫的异常"的解决方案(参考官方给出的解决方案)

首先官方有对这个错误给出解释和解决方案,连接如下: https://docs.microsoft.com/zh-cn/previous-versions/ms228772(v=vs.120)#%E5%8F%AF%E9%9D%A0%E7%BC%96%E7%A8%8B 简单来说,貌似是线程问题,我猜。。。 之前我尝试着在代码中添加 Thread.Sleep(1000); 来进行解决,这种办...

Ck_Max的博客 5767

Airflow 简介及原理

Airflow 简介及原理 Airflow 一个用于编排复杂计算工作流和数据处理流水线的开源工具,通常可以解决一些复杂超长 Cron 脚本任务或者大数据的批量处理任务。 其工作流的设计是基于有向无环图 (Directed Acyclical Graphs, DAG) ,用于设置任务依赖关系和时间调度。 简单来说,在编写工作流时,尽量考虑如何将一个大型的任务拆分为多个可独立执行的原子任务,再将这些任...

Nick 3212

最大似然估计、梯度下降、EM算法、坐标上升

主要讲解的是机器学习中参数学习算法之间的区别,以及应用的场景。 最大似然估计: 其中目标函数是对数似然函数。为了求目标函数取最大值时的theta。有两个关机键步骤,第一个是对目标函数进行求导,第二个是另导数等于0,求解后直接得到最优theta。两个步骤缺一不可。 梯度下降: 对目标函数进行求导,利用导函数提供的梯度信息,使参数往梯度下降最快的方向移动一小步,来更新参数。为什

tzl2093的博客 5141

OpenClaw 报错 npm install failed; cleaning up and retrying...:原生模块编译失败

本文针对OpenClaw项目在部署时出现的"npm install failed"报错问题进行分析,指出该问题源于Node.js原生模块编译链缺失。文章详细列举了常见触发原因,包括缺少gcc/make、Python版本不符、Node版本过新等,并提供了五种解决方案:安装完整编译环境、配置node-gyp Python、重新编译原生模块、切换Node版本以及单独重建失败模块。最后强调在国产服务器环境下部署AI工程时,补齐编译环境和使用稳定Node版本是解决问题的关键,该方案可复用解决

博客 1798

工作流平台airflow简介

airflow 介绍 airflow 是什么 Airflow is a platform to programmatically author, schedule and monitor workflows. airflow 是一个编排、调度和监控workflow的平台,由Airbnb开源,现在在Apache Software Foundation 孵化。airflow 将workflow编排...

小龙在线 7716

一文探讨视频秒开:m3u8视频格式与视频秒开优化

秒开指的是,一秒内成功加载的播放数/播放总数。本意是想对比一下m3u8与mp4视频格式,并了解m3u8格式优缺点,以确定一个大概优化方向。但对m3u8做简单了解后,觉的m3u8可能是一个优化方向。

bjxiaxueliang的CODING小栈 2万+

AirFlow简介(*)

1.简介 Airflow是一个可编程,调度和监控的工作流平台,基于有向无环图(DAG),airflow可以定义一组有依赖的任务,按照依赖依次执行。airflow提供了丰富的命令行工具用于系统管控,而其web管理界面同样也可以方便的管控调度任务,并且对任务运行状态进行实时监控,方便了系统的运维和管理。 2.执行器(Executor) Airflow本身是一个综合平台,它兼容多种组件,所以在使用的时候有多种方案可以选择。比如最关键的执行器就有四种选择: SequentialExecutor:单进程顺序执行任务,

weixin_42408447的博客 1267

uni-app开发-第3篇:uni-app 页面与路由

本文详细介绍了 uni-app 中的页面开发与路由管理。首先,页面是应用的基础单元,创建页面时需在pages目录下新建文件夹和.vue文件,页面结构由<template>、<script>和<style>三部分组成。uni-app 页面生命周期函数包括onShow、onReady、onHide和onUnload,分别用于处理页面显示、渲染完成、隐藏和卸载时的逻辑。其次,路由管理通过pages.json文件配置页面路径和样式,并提供uni.navigateTo等方法进行路由

无 415

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Airflow简介和架构

自定义对象传递需要添加和self.x = x")

AI大模型/Python/Java/MySQL技术栈,快来和我一起学习吧 ~ 1942

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Airflow基础架构简介

Aireflow 处理依赖的方式 Airflow的核心概念,是DAG(有向无环图),DAG由一个或多个TASK组成,而这个DAG正是解决了任务间的依赖问题。Task A 执行完成后才能执行 Task B,多个Task之间的依赖关系可以很好的用DAG表示完善。 Airflow完整的支持crontab表达式,也支持直接使用python的datatime表述时间,还可以用datatime的delta表述...

怒放的生命 4365

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Introduction to Apache Airflow-Airflow简介

Introduction to Apache AirflowWhat is Apache Airflow?什么是Airflow?Airflow is a platform to programmatically author, schedule and monitor workflows.These functions achieved with Directed Acyclic Graphs (...

DevOps持续集成的博客 693

2.airflow参数简介

比较重要的参数: 参数 默认值 说明 airflow_home /home/airflow/airflow01 airflow home,由环境变量$AIRFLOW_HOME决定 dags_folder /home/airflow/airflow01/dags dag python文件目录 ba...

weixin_30242907的博客 906

Airflow DAG 和最佳实践简介

由于组织越来越依赖数据,因此数据管道(Data Pipeline)正在成为其日常运营的一个组成部分。随着时间的推移,各种业务活动中使用的数据量急剧增长,从每天兆字节到每分钟千兆字节。尽管处理这种数据泛滥似乎是一项重大挑战,但这些不断增长的数据量可以通过正确的设备进行管理。本文向我们介绍了 Airflow DAG 及其最佳实践。当 Airbnb 在 2014 年遇到类似问题时,其工程师开发了 Air...

DevOps持续集成的博客 1478

离线数仓任务调度系统Airflow——(Airflow体系架构,crontab简介,Airflow核心)

Airflow将一个工作流制定为一组任务的有向无环图(DAG),并指派到一组计算节点上,根据相互之间的依赖关系,有序执行。Airflow 有以下优势:灵活易用。Airflow 是 Python 编写的,工作流的定义也使用 Python 编写;功能强大。支持多种不同类型的作业,可自定义不同类型的作业。如 Shell、Python、Mysql、Oracle、Hive等;作业的定义简单明了;易扩展。提供各种基类供扩展,有多种执行器可供选择;

qq_43408367的博客 843

Airflow 使用简介

转载于:https://www.cnblogs.com/xianzhedeyu/p/8047828.html

weixin_30361641的博客 92

airflow(二)-使用说明简介及应用场景

一、什么是 Airflow Airflow 是 Airbnb 开源的一个用 Python 编写的调度工具。于 2014 年启动,2015 年春季开源,2016 年加入 Apache 软件基金会的孵化计划。 Airflow 通过 DAG 也即是有向非循环图来定义整个工作流,因而具有非常强大的表达能力。 Airflow DAG DAG 意为有向无循环图,在 Airflow 中则定义了整个完整的作业。同...

Mr_WoLong 7345
上一篇: 计算机网络基础知识总结
下一篇: 如何部署一个健壮的 apache-airflow 调度系统
With__Sunshine
博客等级 码龄9年 128粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值