几种大数据ETL工作流调度系统的介绍和对比

这一生的挚爱 提交于 2020-03-14 12:13:43

几种大数据ETL工作流调度系统的介绍和对比

1. 什么是ETL工作流系统

做过ETL的同学都知道,我们在处理数据的时候往往都是分成好几个任务步骤来完成一个数据处理流程。多个任务单元之间往往有着强依赖关系,上游任务执行并成功,下游任务才可以执行。比如上游任务结束后拿到 A 结果,下游任务需结合 A 结果才能产出 B 结果,因此下游任务的开始一定是在上游任务成功运行拿到结果之后才可以开始。而为了保证数据处理结果的准确性,就必须要求这些任务按照上下游依赖关系有序、高效的执行。
ETL调度系统就是这样可以组织任务前后依赖关系,让任务有序执行的关键系统。
在开源的世界里,目前有这三种调度系统来供我们免费使用,它们是,Airflow,Azkaban,Dolphin scheduler。下面我分别来介绍一下这三个调度系统的架构和工作原理

2. AZKABAN

Azkaban 是国外开源的一个工作流调度系统比较成熟。
先上一张架构图 :


主要有如下几种组件构成:
  • Web Server : 主要包括工作流配置管理,用户认证,定时调度,触发任务执行功能
  • Executor:处理实际工作流和任务的执行
  • Database: 存储工作流和任务的元信息

具体执行流程:

  1. 【1】调度器触发或者人工触发,生成工作流实例信息出入数据库
  2. 【2】更具LB选择一个Executor来执行该工作流实例
  3. 【3】执行状态和结果信息存入数据
  4. 【4】Web server查询数据库告知任务状态信息

架构特点:

  • Web server : 通过quartz来实现分布式调度 ,所有可以水平扩展,不存在单点问题
  • Executor : 可以水平扩展,不存在单点问题
  • 工作流上的任务只能在一个executor执行,不能分散到多个executor上执行,这点限制了调度能力,可能导致资源分布不均衡

3. AIRFLOW

Airflow 是apache的一个顶级开源项目由python编写,下面摘自官网的一段介绍

Airflow was started in October 2014 by Maxime Beauchemin at Airbnb. It was open source from the very first commit and officially brought under the Airbnb GitHub and announced in June 2015.
The project joined the Apache Software Foundation’s Incubator program in March 2016 and the Foundation announced Apache Airflow as a Top-Level Project in January 2019.

可以看到19年1月已经升级为顶级项目了。
同样先上一张架构图:


主要有如下几种组件构成:
  • web server: 主要包括工作流配置,监控,管理等操作
  • scheduler: 工作流调度进程,触发工作流执行,状态更新等操作
  • 消息队列: 存放任务执行命令和任务执行状态报告
  • worker: 执行任务和汇报状态
  • mysql: 存放工作流,任务元数据信息

具体执行流程:

  • 【1】scheduler扫描dag文件存入数据库,判断是否触发执行
  • 【2】到达触发执行时间的dag,生成dag_run,task_instance 存入数据库
  • 【3】发送执行任务命令到消息队列
  • 【4】worker从队列获取任务执行命令执行任务
  • 【5】worker汇报任务执行状态到消息队列
  • 【6】schduler获取任务执行状态,并做下一步操作
  • 【7】schduler更具状态更新数据库

架构特点:

3. DOLPHIN

Dolphin 是国内开源的一个调度系统,19年加入apache孵化器,实现架构上借鉴了airflow和azkaban吧。
先上一张架构图 :


主要组件构成:
  • api server: api接口,管理,执行工作流,任务等。
  • Master: 拆分工作流并按照顺序执行任务
  • 消息队列:存储任务执行命名消息
  • worker: 执行具体任务并更新任务状态

具体执行流程:

  • 【1】触发工作执行,生产待执行工作流命令存入数据库
  • 【2】master扫描执行待执行工作流命令,执行工作流
  • 【3】拆分工作流为一个个执行任务并生成任务实例存入数据库
  • 【4】发送执行任务命令到消息队列
  • 【5】worker 从消息队列里获取执行任务,执行
  • 【6】更新执行任务的状态回数据库
  • 【7】master更具任务执行状态,进行下一步操作

架构特点:

  • api server : 可横向扩展
  • master: 有状态服务 通过zk 来选举一个leader,支持横向扩展
  • worker: 可横向扩展

总结

通过架构对比可以发现 azkaban架构上比较简单 依赖组件较少,工作流里的任务执行局限在一个executor,可能存在资源调度不均衡问题,但如果不是大规模任务调度应该没什么问题,适合中小业务量。
airflow 和 dolphine 架构上差不多,只是实现方式上有些差别。从dolphine也看到了一些airflow的一些影子。
airflow 用python来编写dag文件比较灵活 本身是python语言编写,适合python为主的公司来使用。
dolphine有一个适合国人的ui界面比较清晰本身用Java语言开发,适合对Java语言为主的公司,唯一不足是没有采用airflow的状态汇报到消息队列的方式,这样会导致master需要维护很多任务实例的线程来跟踪任务状态,这样可能导致master cpu压力。

最后,我想说通过实际使用发现这些调度系统都只是有个基础调度功能,需要自己公司二次开发,才能满足结合功能实际需要的一些功能,特别是管理功能。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!