任务调度系统

422 阅读2分钟

任务调度系统分为两类:以Quartz为代表的定时调度系统和以DAG为核心的工作流调度系统。

定时任务调度系统的设计核心是定时运行、数据分片和弹性扩容,但是对依赖关系的支持不太好,更适用于后端开发。 流行的分布式定时任务调度系统有:基于quartz二次开发的Elastic-Job、Xxl-Job等。

大数据领域最常见的操作是ETL(Extract/Transform/Load,将业务数据抽取、清洗转换之后加载到数据仓库的过程),更强调的是任务的依赖关系。工作流调度采用模块化方法对ETL过程各个环节进行协同管理,将ETL整个过程分解为多个数据处理子任务,子任务间采用顺序、并行或互斥等关系进行调度控制。

目前主流的工作流调度系统有Oozie、Azkaban、Airflow等。

Airflow的核心概念有DAG、Operators、Tasks。DAG表示有很多个Task组成的有向无环图;Task就是DAG里面的一个节点;Task由Operators执行,Operators有很多种,比如bash脚本,可以自定义。

一个典型的ETL过程: ->某业务系统每天产生若干原始数据 ->存储到HDFS->MapReduce/Spark/Flink对原始数据进行计算 ->生成的数据以分区表的形式存储到多张Hive表中 ->对多张Hive表的数据进行Join处理得到明细数据Hive大表 ->将明细数据进行复杂的统计分析,得到结果报表信息 ->将统计分析得到的结果同步到业务系统中

hbase适用于实时计算,采用列式结构的nosql,它的定位是数据库,适用于海量明细数据读随机实时查询。 hive适用于离线数据的分析,支持类sql,它的定位是数据仓库。hive可以直接操作hdfs中的文件作为它的表数据,也可以使用hbase数据库作为它的表数据。 hadoop是hive和hbase的基础。hive依赖hadoop,而hbase仅依赖hadoop的hdfs模块。