深入大数据平台心脏:饿了么调度系统全解

qfjavabd qfjavabd     2022-12-11     290

关键词:

  随着饿了么在大数据应用的不断深入,需要解决任务数量增长快、任务多样化、任务关系复杂、任务执行效率低及任务失败不可控等问题。

 

  饿了么大数据平台现状:每天完成大数据任务计算 54000+;节点集群 85 台。

  开源解决方案

  Ooize

  Ooize 基于工作流调度引擎,是雅虎的开源项目,属于 Java Web 应用程序。由 Oozie Client 和 Oozie Server 两个组件构成。

  

技术图片

 

  Oozie Server 运行于 Java Servlet 容器(Tomcat)中的 Web 程序。工作流必须是一个有向无环图,实际上 Oozie 就相当于 Hadoop 的一个客户端。

  当用户需要执行多个关联的 MR 任务时,只需要将 MR 执行顺序写入 workflow.xml,然后使用 Oozie 提交本次任务,Oozie 会托管此任务流。

  AzKaban

  

技术图片

 

  AzKaban 是一套简单的任务调度服务,是 Linkedin 的开源项目,开发语言为 Java,包括 Web Server、DB Server、Executor Server。

  它用于在一个工作流内以一个特定的顺序运行一组工作和流程,定义了一种 KV 文件格式来建立任务之间的依赖关系,并提供一个易于使用的 Web 用户界面维护和跟踪你的工作流。

  AirFlow

  

技术图片

 

  AirFlow 是一个编排、调度和监控 Workflow 的平台,由 Airbnb 开源,现在在 Apache Software Foundation 孵化。

  AirFlow 将 Workflow 编排为 tasks 组成的 DAGs,调度器在一组 Workers 上按照指定的依赖关系执行 tasks。

  同时,AirFlow 提供了丰富的命令行工具和简单易用的用户界面以便用户查看和操作,并且 AirFlow 提供了监控和报警系统。

  饿了么调度系统特性

  饿了么调度系统特性如下:

  任务创建简单,执行频率支持 cron 表达式。

  任务拆分为多种任务类型,支持 19 种任务类型(计算、推送、抽取、检测)。

  任务依赖配置简单,支持不同周期匹配,提供推荐依赖,DAG VIEW 功能。

  调度与执行支持 HA,平滑发布,宕机恢复,负载均衡,监控告警,故障排查,快速扩容,资源隔离。

  支持任务类型:

  计算:Hive、Spark、PySpark、MR、Kylin。

  推送:MySQL 推送、HBase 推送、Redis 推送、Cassandra 推送、HiveToX 推送、MySQL 多推。

  抽取:数据抽取。

  检测:Dal-slave 检测、数据质量检测、Edsink 检测、抽取数据检测、数据有效期、导入导出校验。

  其他:邮件定时任务。

  饿了么调度系统整体架构

  

技术图片

 

  饿了么调度系统整体架构包括如下 5 个部分:

  Web 服务:主要提供任务创建、实例管理、任务依赖管理、Worker 控制、任务监控告警等。

  调度执行:主要由主备 Scheduler 和多个 Worker 节点组成,负责任务的调度与执行。

  基础服务:提供了 Eless 自助发布,ELK 故障排查,Huskar 配置中心,Etrace 埋点监控,DOG 告警等功能。

  底层服务:提供 Hive、Spark、Presto、Kylin、Hadoop 支持。

  公共设施:包括 MySQL、Redis、Zookeeper。

  

技术图片

 

  任务运行过程如上图:

  Web Service 提供的 API 创建任务和依赖关系,将任务信息存入 MySQL。

  Scheduler 定时生成第二天所有任务实例,并定时轮询检查并改变任务状态为 Ready(是否到了执行时间,是否依赖已完成)。

  Worker 启动时注册信息至 Zookeeper,并定时上报机器状态给 Scheduler。

  Scheduler 的 ZkWorkerManager 监听 Zookeeper,获取 Worker 的注册信息。

  获取 Ready 的任务,TaskPacketFactory 将任务构造成 TaskPacket,使用对应的 SubmitPolicy 投递任务给 Worker。

  Worker 通过 Thrift 接收任务,将任务解析成 InterpreterContext,交给对应的 Interpreter 执行,最终由 Docker 运行任务。

  Docker 执行情况返回给 Worker,Worker 回调给 Scheduler 将状态写入 MySQL。

  饿了么调度系统功能

  任务依赖

  

技术图片

 

  

技术图片

 

  任务依赖通过如下两种方式配置:

  推荐依赖:是通过任务执行完将表和列的信息存入 MySQL,由饿了么血缘系统根据表的关联进行推荐。

  手动依赖:则是人为通过界面设置表的依赖关系。依赖关系支持不同周期的任务依赖,偏移量支持表达式【,】【~】。

  失败快速自动重试

  当任务执行失败时,系统自动重新调起,默认重试 3 次;当任务投递过程中,节点因资源紧张拒绝投递,调度会根据负载均衡策略尝试投递另一台机器。

  自助故障排查

  

技术图片

 

  任务执行错误故障排查:节点提供 HTTP 服务,将任务执行的日志通过 HTTP 返回给 Web Service 并展示到界面上,提供用户自助排查。或者通过页面上的连接访问饿了么错误分析平台(Grace)自动分析。

  任务非执行错误排查:任务调度和执行通过 Flume 将任务日志进行收集,通过在 ELK 上搜索全局 ID 即可查看调度和执行情况。

  监控告警

  任务监控告警:根据用户设置的告警规则和告警频率,对任务执行超过完成时间和失败的进行手机、邮件、钉钉告警。

  故障监控和告警:调度和执行节点进行 Etrace 埋点,通过对接收、执行、回调等关键点进行监测,当指标低于其他节点时间窗口平均值时,进行告警。

  调度执行

  

技术图片

 

  调度主备自动切换

  调度器通过向 Zookeeper 注册,并随机选举出 Leader 提供调度服务。非 Leader 服务监听 Leader 状态并 Wait,当 Leader 出现故障,立即切换为 Leader 角色提供服务。

  宕机恢复、自我修复

  当所有调度都宕机时,调度服务未恢复期间,Worker 执行节点回调会出现异常。

  此时任务状态会存入本地文件数据库,并定时重试回调。当调度服务恢复时,任务状态恢复正常。

  当 Worker 执行节点宕机时,节点上的任务会处于运行中。当节点重启时,Worker 会自我修复运行中的任务,将节点上未调起的任务重新调起,已经运行中的任务通过读取 Docker 执行完写入本地的状态文件进行恢复。

  平滑发布

  当 Worker 节点进行版本升级时,运行中的任务进行自我修复,同上。

  资源隔离和快速扩容

  通过 Docker 限制每个任务的 Memory 和 CPU 资源使用;将依赖的底层服务打包成镜像,扩容时便可以很方便的构建需要的环境。

  节点故障维护

  

技术图片

 

  当节点发生故障或需要维护时,Worker 执行节点通过 Web 界面即可进行上线下线服务,下线后认为不再接收任务,但不影响节点上运行中的任务运行。

?

 

饿了么大数据离线计算引擎实践

一、背景饿了么BDI-大数据平台研发团队目前共有20人左右,主要负责离线&实时Infra和平台工具开发。其中6人的离线团队需要维护大数据集群规模如下,Hadoop集群规模1300+HDFS存量数据40+PB,Read3.5PB+/天,W... 查看详情

饿了么大数据离线计算引擎实践

一、背景饿了么BDI-大数据平台研发团队目前共有20人左右,主要负责离线&实时Infra和平台工具开发。其中6人的离线团队需要维护大数据集群规模如下,Hadoop集群规模1300+HDFS存量数据40+PB,Read3.5PB+/天,W... 查看详情

饿了么业务井喷时,订单系统架构这样演进

...饿了么后台支撑研发部负责人,目前任职于饿了么,现任平台研发中心-后台支撑部门负责人,主要负责饿了么外卖订单、统一客服系统、BD销售以及管理工具、代理商管理平台等系统的设计和研发工作。先自我介绍一下,我于2014年... 查看详情

外卖订单爬虫(美团,饿了么,百度外卖)

...饮企业拥有多家外卖门店,订单量非常大,有对订单进行数据分析的需求。主要功能:每天定时启动,抓取三大外卖平台的订单,转成成excel文件,发邮件给需要的人如何使用修改config目录下的production.json1234567891011121314151617181920 查看详情

阿里饿了么?复盘马云102年商业大思维

...年8月,饿了么宣布与百度外卖合并。根据Analysys易观监测数据显示,2017年第4季度中国互联网餐饮外卖市场整体交易规模达677.3亿元人民币、环比上涨16.2%,与去年同期相 查看详情

饿了么cto张雪峰:允许90后的技术人员“浮躁“一点

...此,早在去年,云栖社区就对饿了么的技术进化之路做过深入的介绍(见《饿了么四次技术进化的曲折路,记访谈张雪峰》),并且受到了技术圈的广泛关注。*今年,我们再次邀请到饿了么CTO张雪峰,并试图从 查看详情

饿了么cto张雪峰:允许90后的技术人员“浮躁“一点

...此,早在去年,云栖社区就对饿了么的技术进化之路做过深入的介绍(见《饿了么四次技术进化的曲折路,记访谈张雪峰》),并且受到了技术圈的广泛关注。*今年,我们再次邀请到饿了么CTO张雪峰,并试图从 查看详情

饿了么全链路压测平台的实现与原理

...么的全链路压测的探索与实践,重点是业务模型的梳理与数据模型的构建,在形成脚本之后需要人工触发执行并分析数据和排查问题,整个过程实践下来主要还存在以下问题:测试成本较高,几乎每个环节都需要人力支撑,费时... 查看详情

从0到1搭建大数据平台之调度系统(代码片段)

大家好,我是脚丫先生(o^^o)大数据平台核心之一在于数据计算,分为离线计算和实时计算任务。然而任务是离不开调度的。比如:我们要进行定时抽取业务数据库的数据,定时跑hive/spark任务,定时推送日报、... 查看详情

三大外卖平台(美团、饿了么、百度)你最看好哪个?为啥?

参考技术A三大平台各有所长,目前美团和饿了么所占的市场份额应该是压倒百度外卖了。用户对于平台的取向大多是基于是否有优惠券,配送费,送达时长这些。现在有个快报报的平台,经常有优惠券发放,每周还有限时优惠... 查看详情

饿了么订单记录怎么删除

...继续删除就可以了呢。参考技术A饿了么是一个点外卖的平台,入驻了超多的商家,各种美食应有尽有,那饿了么订单记录怎么删除的呢,让我们一起来看看吧~饿了么订单记录怎么删除1、打开饿了么app,点击【订单】。2、在订... 查看详情

饿了么交易系统5年演化史(代码片段)

作者介绍:杨凡,花名挽晴,饿了么高级架构师,2014年加入饿了么,2018年随饿了么被阿里巴巴收购一同加入阿里巴巴,4年团队管理经验,4年主要从事饿了么交易系统建设,也曾负责过饿了么账号... 查看详情

006_饿了么大前端总监sofish帮你理清前端工程师及大前端团队的成长问题!

...ish的约稿《什么样的人可以称为架构师?》、采访《 饿了么大前端团队究竟是如何落地和管理的?》以及sofish 做客大咖说直播节目的总结和整理,希望能帮助各位淀粉更清晰地理解sofish的观点。获取大咖说视频下载链接... 查看详情

饿了么:业务井喷时订单系统架构的演进

...备不是很充分,比如说监控、日志、告警、框架、消息、数据库,很多基础设施还在建设之中。在这个过程中出现一些问题是在所难免的,对系统的要求不是不能挂、不能出问题,而是出了问题要第一时间能恢复。 关于它的... 查看详情

饿了么骑手审核不通过怎么办

参考技术A扣钱。饿了么会不定时的抽检骑手,骑手没有通过抽检会扣除骑手的钱,是无法申诉的,饿了么是2008年创立的本地生活平台,主营在线外卖、新零售、即时配送和餐饮供应链等业务。 查看详情

饿了么面试经验总结

...上写第一位的项目的具体实现思路答案:第一个项目:是数据库课程设计的大作业,是自己和另外一个同学组多完成的,自己主要负责后台代码的编写,主要涉及到的知识点有:过滤器(filterdoFilter编码过滤器)、拦截器(handerI... 查看详情

订餐系统之同步美团商家订单

...求的人还是满多的,毕竟现在2家几乎瓜分了市场,再做平台已然机会渺茫了,但是商户毕竟需要服务,订单还得配送出去。然后饿了么,美团外卖都提供了面向供应商的api的权限的申请,这对我们做配送系统的说,真是一大利... 查看详情

《饿了么大前端node.js进阶教程》—javascript基础问题—引用传递

《饿了么大前端Node.js进阶教程》地址:https://github.com/ElemeFE/node-interview1.如何编写一个json对象的拷贝函数functionclone(obj){  varresult;  if(Array.isArray(obj)){    result=[];    obj.forEach((item)=>{      result.push(cl 查看详情