[原]数据科学教程:如何使用Airflow调度数据科学工作流

概述

Airflow 是一个我们正在用的工作流调度器,相对于传统的crontab任务管理,Airflow很好的为我们理清了复杂的任务依赖关系、监控任务执行的情况。我们喜欢它是因为它写代码太容易了,也便于调试、维护和继承重用,而不是像xml那样的配置文件用来描述DAG。

clipboard.png

通过SQL和HQL的临时查询,我们还可以快速生成前端图表,而且顺带连数据的API接口也都生成了,这几乎要让的Web开发工程师失业了。

当然Airflow还支持移动端显示,只要收藏页面,我们就可以实现"移动监控"。

clipboard.png

功能总览

1. 任务调度系统:DAGs

  • 强大的任务调度与管理

clipboard.png

  • 调度代码一览无余

clipboard.png

2. 数据剖析

png

  • 配置 SQL 语句,以及作图的option

  • 图表自动生成

  • API数据自动生成

将当前的图表地址 http://localhost:8080/admin/airflow/chart?chart_id=2&iteration_no=40
替换成 http://localhost:8080/admin/airflow/chart_data?chart_id=2&iteration_no=40即可返回json数据

clipboard.png

如果对 API数据自动生成不够满意,还可以轻松地对源代码自行定制。

3. 监控管理

  • 任务日志

clipboard.png

  • 任务监控

clipboard.png

  • 调度配置化

clipboard.png

4. 权限管理

  • 系统配置

clipboard.png

  • 用户管理

clipboard.png

  • 数据源管理

clipboard.png

实战

步骤一:安装Airflow

如果通过 docker

docker pull airflow

如果通过 pip

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple airflow

步骤二:修改默认路径

这里如果不修改路径,默认的配置就是 ~/airflow

临时修改 AIRFLOW_HOME 环境变量, 这里的 /home/airflow 可以替换成你想要的文件夹目录

export AIRFLOW_HOME=/home/airflow

永久修改环境变量

echo "export AIRFLOW_HOME=/home/airflow" >> /etc/profile
source /etc/profile

系统默认的配置文件是从 airflow包的configuration.py文件中获取的,在设置了路径和airflow.cfg之后,配置将由airflow.cfg所替代。

步骤三:修改默认数据库

找到配置文件

vi /home/airflow/airflow.cfg

修改sql配置

sql_alchemy_conn = mysql://root:FinanceR@localhost:3306/airflow

注意到,之前使用的 mysql+driver://root:FinanceR@localhost:3306/airflow的方式是行不通的。

初始化服务器的数据库

airflow initdb
airflow webserver

就可以开启后台管理界面,默认访问localhost:8080即可。

步骤四:修改数据源配置

通过create按钮,添加相应的参数

clipboard.png

步骤五:解决中文字符集显示问题

注意到 airflow 的所有.py文件都声明了 utf-8 字符集

# -*- coding: utf-8 -*-

如果需要显示中文,需要在extra选项中添加
{"charset":"utf8"}的配置

clipboard.png

参考资料

招聘广告

更优阅读体验可直接访问原文地址:https://segmentfault.com/a/11...
作为分享主义者(sharism),本人所有互联网发布的图文均遵从CC版权,转载请保留作者信息并注明作者 Harry Zhu 的 FinanceR专栏:https://segmentfault.com/blog...,如果涉及源代码请注明GitHub地址:https://github.com/harryprince。微信号: harryzhustudio
商业使用请联系作者。


FinanceR
循环写作,持续更新,形成闭环,贵在坚持
2.2k 声望
2.2k 粉丝
0 条评论
推荐阅读
[译] 层次时间序列预测法
大多数关于时间序列预测的文章都侧重于特定的聚合程度。但是,当我们能够深入分析聚合的数据,以便在更细粒度的层次上观察同一个序列时,挑战就出现了。在这种情况下,我们往往会发现,对较低水平的预测与总体预...

HarryZhu阅读 2.7k

封面图
Ubuntu20.04 从源代码编译安装 python3.10
Ubuntu 22.04 Release DateUbuntu 22.04 Jammy Jellyfish is scheduled for release on April 21, 2022If you’re ready to use Ubuntu 22.04 Jammy Jellyfish, you can either upgrade your current Ubuntu syste...

ponponon1阅读 4k评论 1

日常Python 代码片段整理
1、简单的 HTTP Web 服务器 {代码...} 2、单行循环List {代码...} 3、更新字典 {代码...} 4、拆分多行字符串 {代码...} 5、跟踪列表中元素的频率 {代码...} 6、不使用 Pandas 读取 CSV 文件 {代码...} 7、将列表...

墨城2阅读 296

Unicode 正则表达式(qbit)
前言本文根据《精通正则表达式》和 Unicode Regular Expressions 整理。本文的示例默认以 Python3 为实现语言,用到 Python3 的 re 模块或 regex 库。基本的 Unicode 属性分类 {代码...} 基本的 Unicode 子属性Le...

qbit阅读 4.3k

Python + Sqlalchemy 对数据库的批量插入或更新(Upsert)
由于不同数据库对这种 upsert 的实现机制不同,Sqlalchemy 也就不再试图做一致性的封装了,而是提供了各自的方言 API,具体到 Mysql,就是给 insert statement ,增加了 on_duplicate_key_update 方法。

songofhawk1阅读 1.9k评论 4

封面图
Go for 循环有时候真的很坑。。。
大家好,我是煎鱼。不知道有多少 Go 的面试题和泄露,都和 for 循环有关。今天我在周末认真一看,发现了 redefining for loop variable semantics 。著名的硬核大佬 Russ Cox 表示他一直在研究这个问题,并表示十...

煎鱼阅读 3.5k

打脸了兄弟们,Go1.20 arena 来了!
大家好,我是煎鱼。大概半年前,我写过一篇文章《Go 要违背初心吗?新提案:手动管理内存》。有兴趣了深入解的同学,可以再回顾一下。当时我们还想着 Go 团队应该不会接纳,至少不会那么快:懒得翻也可以看我再次...

煎鱼阅读 3.2k

2.2k 声望
2.2k 粉丝
宣传栏