综述
2016-06-22 本文已影响99人
PunyGod
随着互联网的不断发展,数据作为人们行为的基本载体已经在各个行业的决策及发展中起着越来越重要的作用,由此也涌现出了一大批处理大数据的、开源的系统及平台,如HADOOP,HBASE,这些优秀的平台,从计算处理模到数据存储模型,都为用户使用大数据提供了新的思路。但是它们离用户的业务逻辑却相对较远。一个典型的数据处理流程为:
1、业务方产生数据;
2、数据流转入存储平台;
3、数据分析人员书写处理逻辑;
4、计算平台执行处理逻辑;
5、结果返回给业务方;
在此过程中,我们无法要求某一个人能够同时兼顾所有方面,所以就必须要有一个系统来将不同职责的人的工作有机的结合起来,由此即引入了一个概念—任务调度。任务是指数据处理中的某个基本单元,比如一次入库、计算或出库;而调度则是按业务逻辑将这些基本单元有机组合并按序执行,直至产生用户需要的结果数据。
当前最为常用的任务调度即是Crontab调度,按时间先后顺序来调起各个处理单元,但由于业务数据处理耗时的不确定性,仅靠时间先后来保证整个流程是不明智的,因此就呼唤更为复杂的、有着严格任务依赖顺序的调度系统的出现。
此类的的开源项目工程也不断涌出,像apache下的Oozie,LinkedIn家的Azkaban,taobao的zeus,airbnb家的airflow,luigi,quarz调度组件,笔者所在的公司内部也维护一种自研的调度系统,笔者将从设计目的,技术架构,任务组织架构,页面友好型等多个方面,从源码的角度来剖析目前流行的框架,大家可以看到他们有许多共通的东西,当然也有各家独特的思考。