在大数据处理场景下,数据平台的调度系统设计非常关键,而市场上主流的开源产品也非常多,从架构层面来说,对于调度系统设计及主流产品都需要有相应的了解。今天的大数据开发学习分享,我们就来讲讲数据平台调度系统设计及产品选型。
调度系统设计要点
调度平台其实需要解决三个问题:任务编排、任务执行和任务监控。
任务编排:
采用调用外部编排服务的方式,主要考虑的是编排需要根据业务的一些属性进行实现,所以将易变的业务部分从作业调度平台分离出去。如果后续有对编排逻辑进行调整和修改,都无需操作业务作业调度平台。
任务排队:
支持多队列排队配置,后期根据不同类型的开发人员可以配置不同的队列和资源,比如面向不同的开发人员需要有不同的服务队列,面向不同的任务也需要有不同的队列优先级支持。通过队列来隔离调度,能够更好地满足具有不同需求的用户。不同队列的资源不同,合理的利用资源,达到业务价值最大化。
任务调度:
对任务、以及属于该任务的一组子任务进行调度,为了简单可控起见,每个任务经过编排后会得到一组有序的任务列表,然后对每个任务进行调度。这里面,稍有点复杂的是,任务里还有子任务,子任务是一些处理组件,比如字段转换、数据抽取,子任务需要在上层任务中引用实现调度。
任务是调度运行的基本单位。被调度运行的任务会发送到消息队列中,然后等待任务协调计算平台消费并运行任务,这时调度平台只需要等待任务运行完成的结果消息到达,然后对作业和任务的状态进行更新,根据实际状态确定下一次调度的任务。
调度平台设计中还需要注意以下几项:
调度运行的任务需要进行超时处理,比如某个任务由于开发人员设计不合理导致运行时间过长,可以设置任务最大的执行时长,超过最大时长的任务需要及时kill掉,以免占用大量资源,影响正常的任务运行。
控制同时能够被调度的作业的数量,集群资源是有限的,我们需要控制任务的并发量,后期任务上千上万后我们要及时调整任务的启动时间,避免同时启动大量的任务,减少调度资源和计算资源压力。
作业优先级控制,每个业务都有一定的重要级别,我们要有限保障最重要的业务优先执行,优先给与调度资源分配。在任务积压时候,先执行优先级高的任务,保障业务影响最小化。
数据调度产品简介
对于简单的离线数据迁移job,一般都是利用shell脚本通过crontab进行定时执行,但是随着多个job复杂度的提升,似的协调工作、任务监控都变得麻烦,所以需要选择使用工具进行调度监控。
DAG工作流类系统:
oozie
oozie是Hadoop平台开源的工作流调度引擎,它可以管理Hadoop作业,oozie属于web应用程序。
azkaban
azkaban是由Linkedin开源的批量工作流任务调度器。用于在一个工作流内以特定顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系。
chronos
chronos是由Airbnb公司推出的用来替代crontab的开源产品。用户可以用它来对作业进行编排,支持使用Mesos作为作业执行器,与Hadoop进行交互。
分片类系统:
TBSchedule
TBSchedule是淘宝的分布式调度开源框架,基于Zookeeper Java实现。它可以让批量任务或者不断变化的任务,能够被动态的分配到多个主机的JVM中的不同线程组中并行执行,使得所有的任务能够被不重复,不遗漏的快速处理。
elastic-job
当当开发的弹性分布式任务调度系统,采用zookeeper实现分布式协调,实现任务高可用以及分片,并且可以支持云开发。
Saturn
唯品会自主研发的分布式的定时任务的调度平台,基于当当的elastic-job版本1开发,并且可以很好的部署到docker容器上。
关于大数据开发学习,数据平台调度系统设计及产品选型,以上就为大家做了基本的介绍了。在现有的大数据分布式集群环境下,调度系统的设计很重要,对于开发者而言,也需要多去思考。
网友评论