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

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

  饿了么大数据平台现状:每天完成大数据任务计算 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 界面即可进行上线下线服务,下线后认为不再接收任务,但不影响节点上运行中的任务运行。

?

原文地址:https://www.cnblogs.com/qfjavabd/p/10894837.html

时间: 2024-10-31 01:43:30

深入大数据平台心脏:饿了么调度系统全解的相关文章

大数据平台演进之路 | 淘宝 & 滴滴 & 美团

声明:本文参考了淘宝/滴滴/美团发表的关于大数据平台建设的文章基础上予以整理.参考链接和作者在文末给出. 在此对三家公司的技术人员无私奉献精神表示感谢,如果文章造成了侵权行为,请联系本人删除.本人在尊重事实的基础上重新组织了语言和内容,旨在给读者揭开一个完善的大数据平台的组成和发展过程. 本文在未经本人允许情况下不得转载,否则追究版权责任. By 大数据技术与架构 场景描述:希望本文对那些正在建设大数据平台的同学们有所启发. 关键词:大数据平台 大数据平台是为了计算,现今社会所产生的越来越大的数

知名大厂如何搭建大数据平台&架构

今天我们来看一下淘宝.美团和滴滴的大数据平台,一方面进一步学习大厂大数据平台的架构,另一方面也学习大厂的工程师如何画架构图.通过大厂的这些架构图,你就会发现,不但这些知名大厂的大数据平台设计方案大同小异,架构图的画法也有套路可以寻觅. 淘宝大数据平台 淘宝可能是中国互联网业界较早搭建了自己大数据平台的公司,下图是淘宝早期的 Hadoop 大数据平台,比较典型. 淘宝的大数据平台基本也是分成三个部分,上面是数据源与数据同步:中间是云梯 1,也就是淘宝的 Hadoop 大数据集群:下面是大数据的应用

七牛云宫静:基于容器和大数据平台的持续交付平台

7 月 6 日上午,在 ArchSummit 2018 深圳站 | 全球架构师峰会上,七牛云工程效率部技术专家宫静分享了<基于容器和大数据平台的持续交付平台>为题的演讲.本文是对演讲内容的整理.? ? 本次分享的主要内容是基于容器和大数据平台去构建的持续交付系统,是七牛云工程效率部在持续交付.容器化方面去做的技术实践.将从以下两个方向展开:一个是容器化方向,一个是持续交付的平台.主要会结合在七牛云的实践来介绍这个持续集成.持续部署在容器化方向的探索和思考,以及未来方向的考虑.? 01 业务场景

ambari 搭建hadoop大数据平台系列4-配置ambari-server

ambari 搭建hadoop大数据平台系列4-配置ambari-server,分为三部分: 官网:  https://docs.hortonworks.com/HDPDocuments/Ambari-2.4.2.0/bk_ambari-installation/content/download_the_ambari_repo_lnx7.html 安装ambari-server  配置ambari-server  命令;ambari-server setup 启动ambari-server 命令

大数据平台一键安装OS【定制化OS镜像制作】

 定制化 大数据平台一键安装OS 大数据平台一键安装OS系列 大数据平台一键安装OS[搭建脚本篇] 定制化OS镜像制作 1.操作环境 操作环境:VMware Workstarion 9 and vSphere client 系统:CentOS -6.8-x86_64 工具:gconf-editor anaconda repodata createrepo mkisofs rsync 2.主要思路 定制化是通过kickstart脚本来实现的,linux系统安装完毕后在root目录下会生成anaco

美团大数据平台架构实践

今天给大家介绍的内容主要包括以下四个部分首先是介绍一下美团大数据平台的架构,然后回顾一下历史,看整个平台演进的时间演进线,每一步是怎么做的,以及一些挑战和应对策略,最后总结一下,聊一聊我对平台化的看法. 谢语宸是来自美团的大数据构建平台的架构师.他在QCon2016北京站分享了一些整体上构建大数据平台的方法,除了聚焦在某一个点上的还有构建整体的大数据,以及各种各样技术的应用,希望能给大家一些关于大数据方面的启迪.   非常感谢给我这个机会给大家带来这个演讲,我是2011年加入美团,最开始负责统计

Spark大型项目实战:电商用户行为分析大数据平台

本项目主要讲解了一套应用于互联网电商企业中,使用Java.Spark等技术开发的大数据统计分析平台,对电商网站的各种用户行为(访问行为.页面跳转行为.购物行为.广告点击行为等)进行复杂的分析.用统计分析出来的数据,辅助公司中的PM(产品经理).数据分析师以及管理人员分析现有产品的情况,并根据用户行为分析结果持续改进产品的设计,以及调整公司的战略和业务.最终达到用大数据技术来帮助提升公司的业绩.营业额以及市场占有率的目标. 1.课程研发环境 开发工具: Eclipse Linux:CentOS 6

深入浅出解析大数据平台架构

目录: 什么是大数据 Hadoop介绍-HDFS.MR.Hbase 大数据平台应用举例-腾讯 公司的大数据平台架构 "就像望远镜让我们能够感受宇宙,显微镜让我们能够观测微生物一样,大数据正在改变我们的生活以及理解世界的方式--". 大数据的4V特征-来源 公司的"大数据" 随着公司业务的增长,大量和流程.规则相关的非结构化数据也爆发式增长.比如: 1.业务系统现在平均每天存储20万张图片,磁盘空间每天消耗100G: 2.平均每天产生签约视频文件6000个,每个平均2

大数据平台一键安装OS【搭建脚本篇】

定制化大数据平台一键安装OS 大数据平台一键安装OS系列 大数据平台一键安装OS[定制化OS镜像制作] 搭建脚本篇 脚本命名随便,只要能看懂就行 镜像包说明 os1.1.iso 用于安装服务端和客户端操作系统 hdp.iso 用于安装hdp服务 1.架构图: 服务端 客户端 2.原理分析 安装系统-安装本地yum源-安装http源-安装并配置ntp服务-配置秘钥-安装jdk-安装mysql-编译安装ambari平台 3.服务端脚本分析 (1)create_local_yum.sh #安装本地yu