编辑:数据社
全文共1641个字,建议5分钟阅读
大家好,我是一哥,在这个五一假期,又一个Apache项目迎来了重大版本更新——Apache Airflow 2.3.0 在五一重磅发布!
01
Apache Airflow 是谁
Apache Airflow是一种功能强大的工具,可作为任务的有向无环图(DAG)编排、任务调度和任务监控的工作流工具。Airflow在DAG中管理作业之间的执行依赖,并可以处理作业失败,重试和警报。开发人员可以编写Python代码以将数据转换为工作流中的操作。
主要有如下几种组件构成:
- web server: 主要包括工作流配置,监控,管理等操作
- scheduler: 工作流调度进程,触发工作流执行,状态更新等操作
- 消息队列:存放任务执行命令和任务执行状态报告
- worker: 执行任务和汇报状态
- mysql: 存放工作流,任务元数据信息
具体执行流程:
- scheduler扫描dag文件存入数据库,判断是否触发执行
- 到达触发执行时间的dag,生成dag_run,task_instance 存入数据库
- 发送执行任务命令到消息队列
- worker从队列获取任务执行命令执行任务
- worker汇报任务执行状态到消息队列
- schduler获取任务执行状态,并做下一步操作
- schduler根据状态更新数据库
02
本次更新了什么?
Apache Airflow 2.3.0是自2.0.0以来最大的Apache Airflow版本!有700多个提交,包括50个新功能,99个改进,85个错误修复~
以下是最大的和值得注意的变化:
动态任务映射(Dynamic Task Mapping):允许工作流在运行时根据当前数据创建一些任务,而不是让DAG作者事先知道需要多少任务。
代码语言:javascript复制@task
def make_list():
# This can also be from an API call, checking a database, -- almost anything you like, as long as the
# resulting list/dictionary can be stored in the current XCom backend.
return [1, 2, {"a": "b"}, "str"]
@task
def consumer(arg):
print(list(arg))
with DAG(dag_id="dynamic-map", start_date=datetime(2022, 4, 2)) as dag:
consumer.expand(arg=make_list())
网格视图取代树形视图(Grid View replaces Tree View):显示运行和任务,但将依赖关系线留给图形视图,并更好地处理任务组!
为DAG版本管理铺平了道路--可以轻松显示版本,这在树状视图中是无法处理的!
从元数据数据库中清除历史记录 (Purge history from metadata database):新的 "airflow db clean "CLI命令用于清除旧记录:这将有助于减少运行DB迁移的时间(当更新Airflow版本时);
不需要再使用维护DAG了!
连接的 JSON 序列化(JSON serialization for connections):以本地JSON格式创建连接--不需要弄清楚URI格式。
代码语言:javascript复制airflow connections add 'my_prod_db'
--conn-json '{
"conn_type": "my-conn-type",
"login": "my-login",
"password": "my-password",
"host": "my-host",
"port": 1234,
"schema": "my-schema",
"extra": {
"param1": "val1",
"param2": "val2"
}
}'
Airflow db downgrade和离线生成 SQL 脚本 (Airflow db downgrade and Offline generation of SQL scripts):Airflow 2.3.0 引入了一个新命令airflow db downgrade,可以将数据库降级到您选择的版本。
还可以为你的数据库生成降级/升级 SQL 脚本并针对您的数据库手动运行它,或者只查看将由降级/升级命令运行的 SQL 查询。
03
国产调度平台-Apache DolphinScheduler
海豚调度
Apache DolphinScheduler是一个分布式去中心化,易扩展的可视化DAG工作流任务调度平台。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。
- 高可靠性 去中心化的多Master和多Worker服务对等架构, 避免单Master压力过大,另外采用任务缓冲队列来避免过载
- 简单易用 DAG监控界面,所有流程定义都是可视化,通过拖拽任务完成定制DAG,通过API方式与第三方系统集成, 一键部署
- 丰富的使用场景 支持多租户,支持暂停恢复操作. 紧密贴合大数据生态,提供Spark, Hive, M/R, Python, Sub_process, Shell等近20种任务类型
- 高扩展性 支持自定义任务类型,调度器使用分布式调度,调度能力随集群线性增长,Master和Worker支持动态上下线
04
总结
调度平台在数据仓库、BI等场景中起到重要的作用。但很多从业者连 ETL 和ELT的区别都不了解,这无疑是非常不称职的,推荐阅《你真的了解ELT和ETL吗?》。做调度你可以用任何的编程语言来完成开发,无论是 shell、python、java ,只要它最终是让数据完成抽取(E)、转化(T)、加载(L)的效果即可。由于ETL是极为复杂的过程,而手写程序不易管理,所以越来越多的可视化调度编排工具出现了。
调度平台牵扯的业务逻辑比较复杂,场景不同,也许需求就会差别很多,所以,有自研能力的公司都会选择市面上开源系统二次开发或者完全自研一套调度系统,以满足自身ETL任务调度需求。