目前大数据平台经常会用来跑一些批任务,跑批处理当然就离不开定时任务。比如定时抽取业务数据库的数据,定时跑hive/spark任务,定时推送日报、月报指标数据。任务调度系统已经俨然成为了大数据处理平台不可或缺的一部分,可以说是ETL任务的灵魂。 记得第一次参与大数据平台从无到有的搭建,最开始任务调度就是用的Crontab,分时日月周,各种任务脚本配置在一台主机上。Crontab 使用非常方便,配置也很简单。刚开始任务很少,用着还可以,每天起床巡检一下日志。随着任务越来越多,出现了任务不能在原来计划的时间完成,出现了上级任务跑完前,后面依赖的任务已经起来了,这时候没有数据,任务就会报错,或者两个任务并行跑了,出现了错误的结果。排查任务错误原因越来麻烦,各种任务的依赖关系越来越复杂,最后排查任务问题就行从一团乱麻中,一根一根梳理出每天麻绳。crontab虽然简单,稳定,但是随着任务的增加和依赖关系越来越复杂,已经完全不能满足我们的需求了,这时候就需要建设自己的调度系统了。 调度系统,关注的首要重点是在正确的时间点启动正确的作业,确保作业按照正确的依赖关系及时准确的执行。资源的利用率通常不是第一关注要点,业务流程的正确性才是最重要的。(但是到随着业务的发展,ETL任务越来越多,你会发现经常有任务因为资源问题没有按时启动!) 实际调度中,多个任务单元之间往往有着强依赖关系,上游任务执行并成功,下游任务才可以执行。比如上游任务1结束后拿到结果,下游任务2、任务3需结合任务1的结果才能执行,因此下游任务的开始一定是在上游任务成功运行拿到结果之后才可以开始。而为了保证数据处理结果的准确性,就必须要求这些任务按照上下游依赖关系有序、高效的执行,最终确保能按时正常生成业务指标。 一款成熟易用,便于管理和维护的作业调度系统,需要和大量的周边组件对接,要处理或使用到包括:血缘管理,权限控制,负载流控,监控报警,质量分析等各种服务或事务。 调度系统一般分为两类:定时分片类作业调度系统和DAG工作流类作业调度系统 定时分片类作业调度系统 这种功能定位的作业调度系统,其最早的需要来源和出发点往往是做一个分布式的Crontab。 核心:
所以,负载均衡,弹性扩容,状态同步和失效转移通常是这类调度系统在架构设计时重点考虑的特性。 DGA工作流调度系统 这一类系统的方向,重点定位于任务的调度依赖关系的正确处理,分片执行的逻辑通常不是系统关注的核心,或者不是系统核心流程的关键组成部分。 核心:
AirflowApache Airflow是一种功能强大的工具,可作为任务的有向无环图(DAG)编排、任务调度和任务监控的工作流工具。Airflow在DAG中管理作业之间的执行依赖,并可以处理作业失败,重试和警报。开发人员可以编写Python代码以将数据转换为工作流中的操作。 主要有如下几种组件构成:
具体执行流程:
Kettle将各个任务操作组件拖放到工作区,kettle支持各种常见的数据转换。此外,用户可以将Python,Java,JavaScript和SQL中的自定义脚本拖放到画布上。kettle可以接受许多文件类型作为输入,还可以通过JDBC,ODBC连接到40多个数据库,作为源或目标。社区版本是免费的,但提供的功能比付费版本少。 XXL-JOBXXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求;将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑;因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性。(后来才知道XXL是作者名字拼音首字母缩写) 调度系统开源工具有很多,可以结合自己公司人员的熟悉程度和需求选择合适的进行改进。 调度平台其实需要解决三个问题:任务编排、任务执行和任务监控。
调度平台设计中还需要注意以下几项:
ETL 开发是数据工程师必备的技能之一,在数据仓库、BI等场景中起到重要的作用。但很多从业者连 ETL 对应的英文是什么都不了解,更不要谈对 ETL 的深入解析,这无疑是非常不称职的。做ETL 你可以用任何的编程语言来完成开发,无论是 shell、python、java 甚至数据库的存储过程,只要它最终是让数据完成抽取(E)、转化(T)、加载(L)的效果即可。由于ETL是极为复杂的过程,而手写程序不易管理,所以越来越多的可视化调度编排工具出现了。 调度系统作为大数据平台的核心部分之一,牵扯的业务逻辑比较复杂,场景不同,也许需求就会差别很多,所以,有自研能力的公司都会选择市面上开源系统二次开发或者完全自研一套调度系统,已满足自身ETL任务调度需求。 不管是哪种工具,只要具备高效运行、稳定可靠、易于维护特点,都是一款好工具。
|
|