壮实学数据技术05:数据调度

赵壮实/ 一个数据人的自留地
在这里插入图片描述

哈喽,大家好,我是怪力少女赵壮实。

很高兴和大家又一次相聚在周六的早上~在上节《壮实学数据技术04:ETL》中,我们讨论了数仓开发,今天我们衔接一下,讲讲数据加工处理、数据报表生产必不可少的一环:数据调度。

01 什么是数据调度?

在数据开发当中,对于数据调度,我们通常会指是“任务调度”或是“作业调度”。这里,我们先说一个概念,就是job和task。

job和task有几种不同语境下的区别:

spark语境下

在 Spark 中, task 是一个 Job 进行切割后运行的最小运算单元。一般情况下, 一个 rdd 有多少个 partition,就会有多少个 task,因为每一个 task 只是处理一个 partition 上的数据。而 task 进行组合分批后, 被称为 stage。Spark 会为不同的 stage 以及不同的 task设好前后依赖,来保证整个 job 运行的正确性和完整性,最后一个resultTask 结束意味着 job 成功运行。

job>stage>task

hadoop语境下

Hadoop一个作业称为一个Job,Job里面分为Map Task和Reduce Task阶段,每个Task都在自己的进程中运行,当Task结束时,进程也会随之结束;

job>task

某调度产品语境下

Task:一个任务。

TaskType: 任务类型,如 ETL、MR job、 Simple。

Job:作业,任务在运行过程中的一次执行。

综上所述,job、task不同语境下,他们的关系是不一样的,所以在不同的数据调度产品中,要注意他们的区别。

我们来总结一下,数据调度,就是一个任务何时运行,何时结束以及正确的处理任务之间的依赖关系。我们需要关注的首要重点是在正确的时间点启动正确的作业,确保作业按照正确的依赖关系及时准确的执行。

02 数据调度产品包含什么模块?

在设计调度产品中,我们在其中需要理解几个问题:

1.触发机制:时间、依赖、混合

·时间 即任务按时间进行调度(年/月/日/小时/分钟/秒/毫秒)

·依赖 即任务按依赖关系进行调度

·混合 两者相互进行调度

2.工作流:任务状态(中断&运行)、任务管理or治理(类型、变更)、任务类型、任务分片。

3.调度策略:就绪&超时;重试&重试次数&重试用时。

4.任务隔离:任务和执行的关系等。

目前,市面上的任务调度系统有oozie、azkaban、airflow等等,此外,还有包括阿里的TBSchedule、腾讯的Lhotse、当当的elastic-job。

我们可以按dag工作流类、定时分片系统分为两类:

一种是dag工作流类系统:oozie、azkaban、chronos、lhotse

一种是分片类系统:TB Schedule、elastic-job、saturn

其中,dag ( Directed Acyclic Graph),就是一种向无环图,是指任意一条边有方向,且不存在环路的图。有个灵魂画手,我借鉴过来,我们可以感受一下什么是“有向无环”。

在这里插入图片描述

如果选择了dag工作流这种方式,我们就要注意时间、完成度,保证丰富灵活的触发机制。

分片是啥?我们来举个例子:如果我们有 3 台物理机,有 10 个每 5s 执行一次的定时任务,恰恰每个任务都打到第一台机器执行。为了避免“旱的旱死,涝的涝死”,所以我们需要将任务均衡分配到当前所有可执行的物理机上,这就是所谓分片机制。常见的分片机制比如平均分配算法、hash 值、轮询算法,我们以各种各样的算法保证对于物理机的平均“消磨”。

如果我们选择了分片类这种办法,就要注意准确、准时的触发。

03 数据调度产品简介

对于简单的离线数据迁移job,一般都是利用shell脚本通过crontab进行定时执行,但是随着多个job复杂度的提升,似的协调工作、任务监控都变得麻烦,所以我们选择使用工具进行调度监控。

3.1 dag工作流类系统

oozie

oozie是 Hadoop 平台开源的工作流调度引擎,它可以管理Hadoop作业。oozie属于web应用程序,由oozie client和oozie Server两个组件构成。Oozie不只配置多个MR(mapreduce)工作流,它可以执行一个MR1后,接着执行一个java脚本,再执行一个shell脚本,接着是Hive脚本,然后又是Pig脚本,最后又执行了一个MR2。使用oozie时,若前一个任务执行失败,后一个任务将不会被调度。

azkaban

azkaban是由Linkedin开源的批量工作流任务调度器。用于在一个工作流内以特定顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系。
在这里插入图片描述
在这里插入图片描述

chronos

chronos 是由 Airbnb 公司推出的用来替代 crontab的开源产品。用户可以用它来对作业进行编排,支持使用 Mesos 作为作业执行器,与Hadoop 进行交互。同时,chronos 还可定义作业执行完成后的触发器,支持任意长度的依赖链。

在这里插入图片描述

3.2分片类系统

TBSchedule:TBSchedule是淘宝的分布式调度开源框架,基于Zookeeper Java实现。它可以让批量任务或者不断变化的任务,能够被动态的分配到多个主机的JVM中的不同线程组中并行执行,使得所有的任务能够被不重复,不遗漏的快速处理。

elastic-job:当当开发的弹性分布式任务调度系统,采用zookeeper实现分布式协调,实现任务高可用以及分片,并且可以支持云开发。

saturn:唯品会自主研发的分布式的定时任务的调度平台,基于当当的elastic-job 版本1开发,并且可以很好的部署到docker容器上。

在这里插入图片描述

好啦,今天的又是烧脑的一天。

还记得当初可可爱爱的文玉给我讲crontab的事情,我当时觉得这是爆难的事情。

但是现在从整个调度产品和技术框架来看,crontab就是塞尔达的新手村了。

所以,你会经历寻找防寒服的哭泣,也会经历获得飞行器的欢愉。

To define is to limit。

在这里插入图片描述

抒个小情,我是赵壮实,我们《壮实学数据技术06》下周见!

一个数据人的自留地是一个助力数据人成长的大家庭,帮助对数据感兴趣的伙伴们明确学习方向、精准提升技能。关注我,带你探索数据的神奇奥秘

1、回“数据产品”,获取<大厂数据产品面试题>

2、回“数据中台”,获取<大厂数据中台资料>

3、回“商业分析”,获取<大厂商业分析面试题>;

4、回“交个朋友”,进交流群,认识更多的数据小伙伴。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值