一、调度

  从上个世纪50年代起,调度问题的研究就受到数学、运筹学、工程技术学等领域科学的重视[1],人们主要从数学的角度来研究调度问题,调度问题也同样被定义为”分配一组资源来执行一组任务”,以获得生产任务执行时间或成本的最优[2]。调度在计算机任务的实现可以依赖操作系统的定时任务进行触发(例如Linux系统的Crontab),主要针对单任务机制的触发,调度最基本的需要能够按时或者按照事件进行触发(At-least-once),如果任务不符合预期,还需要在应用端进行重试,最大可能保证任务被按时执行,并且成功执行,同时不能多次执行(Exactly once);但是在业务场景能保证可重复执行、一致性操作情况下对于争取能正常调度执行多次执行也是不可或缺的,比如给商户进行1min前的例行结算,如果结算是按照30min的时间窗口查找未结算的商户,那么就会容忍30min延迟,并且多次被执行也不会给商户多结算,因为在结算付款和重置是否结算标志位可以设计成原子性操作。所以在调度上能够做到按时、正确的执行,在业务方设计为了保证最终一致性也有一些架构上的取舍。

  如果应用场景有上下游的协作,或者在任务执行会存在不同的宿主机来完成,或者为了保证任务高可用场景,就需要引入分布式调度的架构。

  二、分布式调度

  分布式调度是在单机的基础上发展起来,在综合考虑高可用、高效率、分布式协作的背景下逐步演进的调度方式,从单点调度到分布式协作是一个质变的过程,这个过程涉及到许多在单机并不存在的特征,下面针对重点展开聊下:

  图1 分布式调度组件化分解图

  2.1 调度器去中心化&高可用

  涉及到分布式调度的协作,就需要有调度中心节点,同时要保证高可用的目的就需要调度中心节点是多节点发布,主备的方式去单点依赖。

  2.2 宿主选择

  分布式调度在任务执行阶段,可以在目标宿主中进行全部执行、N选M(N>=M>=1)的选择,宿主机具备相同类型任务互备的机制,在MPP(Massively Parallel Processor)架构中尤为常见,把大任务分而治之快速完成。也存在场景(比如外卖给商户结算)为了一致性和准确性只能由一台主机进行执行,并且需要成功执行。

  被动选择策略:宿主的被动选择机制一般可以随机或者按照顺序选择策略,也可以按照当前宿主机进行的任务执行数量的方式进行常规的调度分配。当然,也可以进行高级的操作,参照宿主机的处理能力(吞吐量和响应时间)、资源使用情况(CPU、Memory、Disk I/O、Net I/O等)进行反馈机制的动态分配。后者需要有集中节点存储当前宿主机的处理能力、资源情况,便于在决策选择中提供参照。

  主动选择策略:宿主的主动选择具备更加丰富的选举策略,任务在下达到具体算子时,会比较明确的定义出当前任务需要由多少个宿主参与执行,通过zookeeper的分布式锁来实现锁的抢占机制,抢占成功则执行,否则放弃。这种选举策略让宿主机得到了更多的参与,降低了对调度器的依赖。这种主动选择的方式,避免被动选择因不具备执行条件被选中,在执行的能力在时间上的损耗。

  2.3 任务故障转移

  调度任务的从任务级别job到transformer、operator,整个链条都存在具体局部失败的情况,调度器需要在原目标宿主机重试和失败后转移到其他备宿主机的功能,最大力度的保证任务被成功执行。

  2.4 执行算子抽象

  以往单机任务的调度可以比较灵活的执行多样的任务,可以是脚本、Webservice调用、HDFS Client命令行等,但是对于分布式协作需要接收外部命令运行,这就需要算子通过标准的数据通讯协议对外提供调用服务,常规的WebService、RPC(thrift/protocol buffer)等协议在跨语言通讯上具有较为广泛的应用。所以具体执行单元可以是具体任务的抽象,例如提供了Rest API方式,调用的URL和参数都是执行方填入,最大程度上支撑了灵活性;数据库操作算子可以包含数据库验证信息、具体执行的SQL等。执行算子抽象后,满足规范和灵活性,灵活是一个双刃剑,可以最大限度的满足用户需求,但也会导致大数据层面无法很细粒度的去感知数据的表、字段数据的完成情况,对数据生产无法更加精细粒度的产出交付。

  2.5 弹性扩展

  任务具体执行的宿主机需要在调度层面满足弹性的扩展,扩展最主要的需要是满足高可用和任务随着水平扩展进行分摊压力。在集群目标宿主机选择时,一般目标集合可以指定具体IP-List,也可以是一个BNS(百度机器的NameServer服务)。IP-List方式设置比较简单直观,但是存在每次调整依赖变更调度系统服务,变更之后还需要进行刷新宿主机的情况。而通过BNS服务比较简单,同时和线上服务发布部署进行结合,不存在延迟部署和刷新,推荐通过BNS的方式介入。

  2.6 触发机制

  常规触发是按照执行间隔或者具体时间的Crontab语法,开始时间,截止时间参数完成,但是在分布式调度任务中,最重要的就是完成协作,所以如果要进阶的话,就是依赖触发的机制。这种就很好的形成了上下游依赖触发,是分布式协作的关键步骤。从最初的任务节点按照常规触发,下游节点形成依赖链条,这里如果在高级进阶的话,就是依赖的某个/某些频次触发,比如每小时的12分钟开始被执行,下游可以选择具体的2:12 ,4:12进行触发,而非每个整点12分都被调用。这三种方式目前在外卖的大数据平台都有不同场景诉求,架构设计在3个需求上都有灵活的交付。

  2.7 堵塞机制

  对于相同任务的不同时间的运行实例,会存在前面的实例还没有正常结束的情况,这种在高频次调用,第三方依赖故障延迟等情况下会出现,如果继续调用会造成调用链条恶化,所以防止这种情况,堵塞机制会提供三种模式:常规例行(默认模式)、丢弃后续、丢弃前例。后面2种方案都需要提供容错重放机制,这个场景比较类似1.1章节提到的结算案例。

  2.8 图形化进展查看

  调度可以根据调用链条和不同事件频次的实例,通过树状图形化的方式查看执行的进度情况,例如可以查看job中transformer、算子的运行机器状况、状态和具体的实时执行日志。图形化是根据调用的触发机制分析出来的一个链条,是在烦冗复杂的调用关系中找到清晰脉络的数据直观表达的方式,是调度中常规的展示方式。在进阶中可以查看相应的参数传递,并发算子的执行进度条,预估完成周期等。

  2.9 报警

  通过邮件或者短信的方式对不符合预期返回标识的进行中止,同时通过邮件或者短信等方式对预先设置的用户或者用户组发出警告。报警触发的机制可以在宿主机单台时候触发,也可以在一定占比的宿主机在一定的时间窗口超过了阈值,触发报警。同时也要支持报警的屏蔽,用在进行运维或者升级部署、运维接管的情况。

  上面是很多常规调度拥有的一些特征,这些是在分布式场景下的延伸需求,从单点简单的逻辑到多节点的协作统筹在工程层面无疑增加了额外辅助,这些都是在业务演进中逐步完善起来,而高可用、高效率是在分布式环境下做出的改变。

在这里我还是要推荐下我自己建的大数据学习交流qq裙:522189307 , 裙 里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据开发相关的),包括我自己整理的一份最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴。上述资料加群可以领取

  三、大数据分布式调度

  大数据分布式调度,在上面通用调度的基础上又进行了具体跟数据特征相匹配的改良。主要是从数据的流程层面进行梳理,用来解释数据的上下游、血缘关系的问题,具体又有哪些特征是针对大数据的呢?

  3.1 数据扇入扇出

  大数据的存储和检索方案很多,因大数据特征之一就是多样性,为了满足多样的业务场景会有不同的引擎或者存储选择,在多样化解决方案的同时,造成了数据之间进行交换变得复杂,引擎之间的数据存取规则都有个性化的支持,比如Hbase的数据到Mysql和ElasticSearch(以下简称ES),涉及到Hbase的读取和后续后面两者的数据存入,这种对于Hbase就是一对二的数据扇出,但是在数据在Hbase中通过Get或者Scan方式获取后,要插入数据需要了解后面2者的存储结构,甚至是索引结构。所以类似这种跨引擎(或者跨版本,不同API)的方式,为了保持通用,需要进行需求的抽象,在外卖平台针对数据的交换定义了一套开放式SQL,这个框架对数据引擎的存和取分别作了抽象,在不同的目标引擎中有具体的实现,所以就有一些约定的规范。

面向大数据的分布式调度相关推荐

  1. 面向大数据与云计算调度挑战的阿里经济体核心调度系统

    编者按 伏羲(Fuxi)是十年前最初创立飞天平台时的三大服务之一(分布式存储 Pangu,分布式计算 MaxCompute,分布式调度 Fuxi),当时的设计初衷是为了解决大规模分布式资源的调度问题( ...

  2. 面向大数据异构系统的神威并行存储系统

    点击上方蓝字关注我们 面向大数据异构系统的神威并行存储系统 何晓斌1, 蒋金虎2 1 国家并行计算工程技术研究中心,北京 100080 2 复旦大学计算机科学技术学院,上海 200433 论文引用格式 ...

  3. 面向大数据的异构内存系统

    面向大数据的异构内存系统 王孝远, 廖小飞, 刘海坤, 金海 华中科技大学计算机学院,湖北 武汉 430074 摘要:受限于DRAM和新型非易失性存储器(non-volatile memory,NVM ...

  4. 面向大数据的索引结构研究进展

    面向大数据的索引结构研究进展 严赵峰, 张为华 复旦大学并行处理研究所,上海 201203 摘要:为了保证各类大数据系统的性能,以并发索引结构为核心的高效检索技术变得越来越重要.然而,数据存储体量的增 ...

  5. springboot项目集成大数据第三方dolphinscheduler调度器

    文章目录 摘要 项目背景 功能要求 功能说明 1.1用例图 1.2业务流程分析 1.3业务ER图 1.4 管理任务流程图 1.5功能设计详细说明点 1.6页面原型 三.本人相关其他文章链接 摘要 ①d ...

  6. 大数据的分布式数据库相关知识

    现如今,大数据的发展得到了越来越多人的关注,当然,很多企业也开始关注大数据,通过大数据可以从数据中挖掘出有价值的数据,从而找出隐藏的商机,而大数据的分布式数据库是一个十分重要的内容.我们在这篇文章中就 ...

  7. caj文件打不开显示内存不足_面向大数据的高效存储容量缩减技术研究

    面向大数据的高效存储容量缩减技术研究 [摘要]:随着信息化的发展,全球数据量呈指数式增长,数据中心存储规模快速迈向了PB级甚至是EB级,其中包含了大量的冗余数据.这些冗余数据占用了大量的存储资源,导致 ...

  8. 从0到1搭建大数据平台之调度系统

    目前大数据平台经常会用来跑一些批任务,跑批处理当然就离不开定时任务.比如定时抽取业务数据库的数据,定时跑hive/spark任务,定时推送日报.月报指标数据.任务调度系统已经俨然成为了大数据处理平台不 ...

  9. 大数据 智能交通调度_当大数据邂逅智能交通

    原标题:当大数据邂逅智能交通 智能交通领域是大数据应用的天然沃土.而大数据和人工智能正在成为推动交通智能化.自动化的核心力量. 一.大数据AI"上路" 2016年,烟台高速交警支队 ...

最新文章

  1. poj2155(二维树状数组)
  2. Linux上部署web服务器并发布web项目
  3. 刚开始走向工作岗位初遇到的一些问题
  4. 数据结构知识点总结_大牛带你学 | 考研数据结构中线性表中顺序结构的知识点总结...
  5. python 从数据库 提取数据 生成html_python如何将数据生成html文件+浏览器中文显示乱码问题...
  6. NTKO OFFICE文档控件技术资料(转载)
  7. ios苹果应用ipa一键签名工具_ios签名何以做到不越狱不上架也能安装ipa文件?
  8. 【TBSchedule】TBSchedule应用实战手册
  9. 51nod1127 最短的包含字符串
  10. 开源H5棋牌 cocos creator微信棋牌小游戏 幼麟棋牌客户端分析笔记
  11. 微信测试睡眠的软件,微信小睡眠小程序使用方法
  12. 好书分享、能量传递-《软技能 代码之外的生存指南》自我营销篇
  13. 直播平台源码搭建教程之Android音视频开发
  14. android开发的程序闪退,Android软件闪退
  15. 将Twitter4j与Scala结合使用以执行用户操作
  16. android 拦截耳机按键,Android耳机监测以及耳机按键监测
  17. html fmt转换日期格式,JSP JSTL fmt:parseDate标签:转换为时间
  18. java手电筒源码_android平台手电筒开发源代码
  19. bzoj 4627: [BeiJing2016]回转寿司 -- 权值线段树
  20. 电脑上控制手机的工具

热门文章

  1. 查看Debian版本号的方法
  2. DataGridView 控件中自动生成列
  3. csp-j2022比赛心得
  4. js 判断是否为 Android IOS IPAD IPHONE 等移动设备访问
  5. 电脑桌面计算机打开很慢,电脑桌面刷新反应很慢怎么办?电脑桌面刷新很慢解决方法...
  6. 微信支付的时候提示:当前交易异常,暂无法完成支付,请注意合法使用账户,否则将升级限制措施!
  7. (扩展)BSGS与高次同余方程
  8. Photon网络中Player中存取数据
  9. 梦幻西游游戏官网服务器状态,梦幻西游:凌晨4点了,这个游戏究竟还有几个服务器不是鬼区?...
  10. 图像保边滤波算法集锦系列