airflow和MySQL_Airflow知识总结
1.Airflow是什么
airflow是apache基金会的顶级开源项目之一,主要用于调度、监控工作流
2.airflow main concepts
airflow的基本组件架构
airflow scheduler.jpg
scheduler:以有向无环图(dag)的形式创建任务工作流,根据用户的配置将任务定时/定期进行调度
worker:任务的执行单元,worker会从任务队列当中拉取任务并运行任务
webserver:任务与dag的web管理服务
message queue: 任务的调度队列,一般使用redis或者rabbiMq作为broker
metadata center: 所有任务、dag、日志的相关元信息均存储于metadata Center,一般使用MySQL进行metadata管理
调度单元
dag: airflow当中work flow的基本单位,通过配置Dag当中的相应参数确定调度时间、调度频率,通过实例化dag当中的task创建实际工作流
task: task由operator以及task upstream/downstream两部分组成,airflow提供了非常丰富的operator能够对接各类平台与系统实现任务执行,任务之间通过简单的上下游关系建立关系组成工作流
queue:airflow通过队列一方面可以实现用户管理(不同的用户绑定不同的队列),另一方面可以实现分布式任务调度(一个队列对应多个分布式服务器)
调度参数
调度时间,包括dag的开始时间、调度时间间隔、调度重试次数、调度重试间隔、初始调度是否往前追加等
并发参数,包括整个ariflow服务最大并发task数,单个dag最大的任务并发数,以及单个dag最大的并发dag_run数目
airflow concurrency.jpg
自定义参数,包括一套使用Jinja2格式的自定义宏参数
3.airflow实践
目前我们在生产环境使用airflow主要还是用于金融数据的ETL,ETL框架的基本结构如下图所示
airflow etl structure.png
我们的所有基础设施都是基于Openshift搭建的私有云,所有的airflow组件均实现容器化部署,容器化的好处主要在于快速的持续集成与发布,同时airflow关键组件均能实现主备容灾与弹性扩缩容;所有的数据经过ETL处理之后存储于本地的数据仓库当中(时间序列金融数据库与对象存储数据文件);同时通过插件将airflow与apache Atlas集成,构建数据生产流任务的血缘关系,进行数据治理,通过Amundsen集成数据检索与数据读写接口,将ETL后的数据开放给用户使用
4.使用当中遇到的各类问题:
ETL调度时间问题: 这个常见的问题可能每一个初次接触airflow的人都会遇到,airflow任务的实际调度时间比设置的调度时间晚一天,这个是因为airflow被设计用于ETL任务调度,而ETL的特点就是等待原始数据收集/预处理完毕之后,再进行运行,比如20200101这一天的ETL任务,实际上会在20200102的凌晨进行运行
airflow execution date.jpg
mysql死锁问题:此问题在我们前期使用airflow的过程中,频繁出现,问题表现为任务不调度,同时airflow调度器日志显示mysql deadlock,此问题根因为airflow代码bug导致,在scheduler管理任务的过程当中,对task_instance表单会同时有2个查询,而这2个查询在一定情况会发生死锁,感谢我的大佬同事去社区和airflow维护者讨论之后找到了问题根因并修复了这个bug(airflow 1.10后的版本修复了查询语句,防止了死锁的出现)
airflow-deadlock.jpg
HA问题,scheduler单点故障: 前期没有搭建私有云,airflow服务均部署在单台服务器之上,唯一的可靠性保障就是用supervisor保障服务进程持续运行,但是服务器的故障无法避免,后期基础设施云化之后可以保障服务器层面上面的可靠性,同时我们也在本地服务器上面保存了手动运行的脚本,保证私有云故障时可以在本地快速搭建临时服务
任务集中化监控问题,硬件监控,服务监控,业务任务监控: airflow有比较方便的webUI,但是有一个很大的问题就是无法实现任务的集中化监控,任务的集中化最高一级只能到Dag层面,而我们常常需要根据业务属性集中化监控几个甚至几十个Dag的所有任务,对于这种场景,我们一方面搭建了一套ELK日志系统(airflow -> kafka -> logstash -> kibana),在logstash当中根据业务分类创建相应的日志index,最后在kibana当中显示定制化的dashboard;另一方面我们的airflow集成了atlas,可以根据任务之间的血缘关系管理与监控整个生产流的任务状态
airflow和MySQL_Airflow知识总结相关推荐
- airflow sql_alchemy_conn mysql_airflow的安装和使用 - 完全版
之前试用了azkaban一小段时间,虽然上手快速方便,但是功能还是太简单,不够灵活. Airflow使用代码来管理任务,这样应该是最灵活的,决定试一下. 我是python零基础,在使用airflow的 ...
- airflow sql_alchemy_conn mysql_airflow使用mysql数据库,LocalExecutor并发调度
mysql-airflow 在mysql上执行 create database airflow; -- 创建数据库 GRANT all privileges on airflow.* TO 'airf ...
- airflow mysql_Airflow 使用及原理分析
Airflow 入门及使用 什么是 Airflow?Airflow 是一个使用 Python 语言编写的 Data Pipeline 调度和监控工作流的平台. Airflow 是通过 DAG(Dire ...
- airflow mysql_AirFlow 安装配置
airflow 安装配置 airflow 相关软件安装 python 3.6.5 安装 安装依赖程序 : [root@node01 ~]# yum -y install zlib zlib-devel ...
- [译] 解密 Airbnb 的数据科学部门如何构建知识仓库
顽疾 Airbnb的数据团队很重要的一个职责就是传播基于数据的决策方法.我们将数据的获取民主化,使得每一个Airbnb的成员都可以量化他们基于数据的决策影响力并且借此洞察用户偏好,提升数据产品的用户体 ...
- 收藏!一张图帮你快速建立大数据知识体系
简介: 对海量数据进行存储.计算.分析.挖掘处理需要依赖一系列的大数据技术,而大数据技术又涉及了分布式计算.高并发处理.高可用处理.集群.实时性计算等,可以说是汇集了当前 IT 领域热门流行的 IT ...
- 你不可不知的任务调度神器-AirFlow
点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 大数据真好玩 点击右侧关注,大数据真好 ...
- 任务调度神器 airflow 之初体验
airflow 是 apache下孵化项目,是纯 Python 编写的一款非常优雅的开源调度平台.github 上有 9161 个星,是非常受欢迎的调度工具.airflow 使用 DAG (有向无 ...
- 最全大数据技术知识体系
大数据技术知识体系 大数据技术知识体系 --持续更新,建议收藏 最早提出"大数据"时代到来的是全球知名咨询公司麦肯锡,麦肯锡称:"数据,已经渗透到当今每一个行业和业务职能 ...
最新文章
- SharePoint 2013 数据库中手动更新用户信息
- 多线程:无锁、偏向锁、轻量锁、重量级锁
- leetcode 91. Decode Ways | 91. 解码方法(动态规划)
- 从底层重学 Java 之 Stream 并行及标志 GitChat连接
- ubuntu nginx配置负载均衡篇(二)
- .Net 2.0 文档生成工具
- Flutter进阶—质感设计之进度条
- 行人属性数据集pa100k_Attribute-Recognition行人属性识别资料
- windows 64 搭建RabbitMQ环境
- 2020年互联网大厂中秋礼盒PK!你们呢......
- 数学建模国赛 2020B-穿越沙漠 第一关 Lingo 和 C语言 动态规划求解
- 文件同步工具GoodSync简介
- 华硕主板实现Wake on lan 网络唤醒的种种细节
- 淘宝网无法确认收货(chrome)
- 简单数据类型的转换和条件控制语句(if else)的使用
- 数据结构的C实现_二叉树
- Zotero文献管理软件使用指南——进阶篇
- 所谓“尽人事,听天命”
- LPC24xx系列CAN波特率计算
- java 秒转date_【Java】时间戳与Date相互转换