1、为什么需要工作流调度系统
1、数据分析系统由大量的任务单元组成
java job,python job ,bash job ,mapreduce job etc.
2、任务单元之间存在时间先后以及前后依赖关系
2、常见工作流调度系统
系统自带的工具:
linux:crontab
windows: 任务计划程序
开源:
apache oozie :重量级的任务调度系统,功能全面,配置复杂,XML文件定义工作流
azkaban :solo server mode / multi server mode
airflow :
3、为什么airflow
功能强大
1. 系统配置($AIRFLOW_HOME/airflow.cfg)
2. 作业管理($AIRFLOW_HOME/dags/xxxx.py)
3. 运行监控(webserver)
4. 报警(邮件)
5. 日志查看(webserver 或 $AIRFLOW_HOME/logs/*)
6. 后台调度服务(scheduler)
7、支持15+operators,支持自定义operator
灵活易用(纯python编写)学习和维护成本低
airflow 免费
4、airflow 的几个重要概念
DAG : directed acyclic graphs 即有向无环图
管理作业依赖关系
操作符 operator
定义实际需要执行的作业
web服务器-webserver
webserver 是 airflow 的界面展示
可显示 DAG 视图,控制作业的启停,清除作业状态重跑,数据统计,查看日志,管理用户及数据连接等
不运行 webserver 并不影响 airflow 作业的调度。
调度器 schduler 负责读取 DAG 文件,计算其调度时间,当满足触发条件时则开启一个执行器的实例来运行相应的作业。
Task Instance:task的一次运行。task instance 有自己的状态,包括"running", "success", "failed", "skipped", "up for retry"等。
执行器有 SequentialExecutor, LocalExecutor, CeleryExecutor
1. SequentialExecutor 为顺序执行器,默认使用 sqlite 作为知识库,由于 sqlite 数据库的原因,任务之间不支持并发执行
2. LocalExecutor 为本执行器,任务之间支持并发执行,常用于生产环境,需要配置数据库连接 url。
3. CeleryExecutor 为 Celery 执行器,需要安装 Celery ,Celery 是基于消息队列的分布式异步任务调度工具。需要额外启动工作节点-worker。使用 CeleryExecutor 可将作业运行在远程节点上。消息队列编排各个worker节点
4、DaskExecutor