本文原创首发于DBAPlus社群线上,地址 https://mp.weixin.qq.com/s/57h3IwMzLgxE_wrrqz_9HA

背景

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

目前现状

  • 每天完成大数据任务计算54000+
  • 节点集群85台

开源解决方案

  • Ooize是基于工作流调度引擎,是雅虎的开源项目,属于java web应用程序。由Oozie client和Oozie Server两个组件构成。Oozie Server运行于Java Servlet容器(Tomcat)中的web程序。工作流必须是一个有向无环图,实际上Oozie就相当于Hadoop的一个客户端,当用户需要执行多个关联的MR任务时,只需要将MR执行顺序写入workflow.xml,然后使用Oozie提交本次任务,Oozie会托管此任务流。

  • AzKaban是一套简单的任务调度服务,是Linkedin的开源项目,开发语言为Java。包括web Server、dbserver、executorserver。用于在一个工作流内以一个特定的顺序运行一组工作和流程。定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

  • 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服务、调度执行、基础服务、底层服务,公共设施。

  • web服务主要提供任务创建、实例管理、任务依赖管理、worker控制、任务监控告警等。
  • 调度执行主要由主备Scheduler和多个worker节点组成,负责任务的调度与执行。
  • 基础服务提供了Eless自助发布,ELK故障排查,Huskar配置中心,Etrace埋点监控,dog告警等功能。
  • 底层服务提供Hive,Spark,Presto,Kylin,Hadoop支持。
  • 公共设施包括Mysql,Redis,zookeeper。

任务运行过程

  • WebService提供的Api创建任务和依赖关系,将任务信息存入mysql
  • Scheduler定时生成第二天所有任务实例,并定时轮询检查并改变任务状态为ready(是否到了执行时间,是否依赖已完成)
  • Worker 启动时注册信息至Zookeeper,并定时上报机器状态给Scheduler
  • Scheduler的ZkWorkerManager监听Zookeeper,获取Worker的注册信息
  • 获取ready的任务,TaskPacketFactory将任务构造成TaskPacket,使用对应的SubmitPolicy投递任务给Worker
  • Worker通过Thrift接收任务,将任务解析成InterpreterContext,交给对应的Interpreter执行,最终由Dorker运行任务
  • Docker 执行情况返回给Worker,Worker回调给Scheduler将状态写入mysql

饿了么调度系统功能

任务依赖

  • 任务依赖通过两种方式配置,推荐依赖和手动依赖。推荐依赖是通过任务执行完将表和列的信息存入mysql,由饿了么血缘系统根据表的关联进行推荐;手动依赖则是人为通过界面设置表的依赖关系。依赖关系支持不同周期的任务依赖,偏移量支持表达式【,】【~】。

失败快速自动重试

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

自助故障排查

  • 任务执行错误故障排查:节点提供Http服务,将任务执行的日志通过http返回给WebService并展示到界面上,提供用户自助排查。或者通过页面上的连接访问饿了么错误分析平台(Grace)自动分析。
  • 任务非执行错误排查:任务调度和执行通过Flume将任务日志进行收集,通过在Elk上搜索全局Id即可查看调度和执行情况。

监控告警

  • 任务监控告警:根据用户设置的告警规则和告警频率,对任务执行超过完成时间和失败的进行手机,邮件,钉钉告警。
  • 故障监控和告警:调度和执行节点进行etrace埋点,通过对接收、执行、回调等关键点的进行监测,当指标低于其他节点时间窗口平均值时,进行告警。

调度&&执行

调度主备自动切换

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

宕机恢复、自我修复

  • 当所有调度都宕机时,调度服务未恢复期间,Worker执行节点回调会出现异常。此时任务状态会存入本地文件数据库,并定时重试回调。当调度服务恢复时,任务状态恢复正常。
  • 当Worker执行节点宕机时,节点上的任务会处于运行中。当节点重启时,Worker会自我修复运行中的任务,将节点上未调起的任务重新调起,已经运行中的任务通过读取docker执行完写入本地的状态文件进行恢复。

平滑发布

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

资源隔离和快速扩容

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

节点故障维护

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

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

  1. 大数据平台框架、组件以及处理流程详解

    数据产品和数据密不可分作为数据产品经理理解数据从产生.存储到应用的整个流程,以及大数据建设需要采用的技术框架Hadoop是必备的知识清单,以此在搭建数据产品时能够从全局的视角理解从数据到产品化的价值. ...

  2. 哈尔滨3D可视化数字孪生工厂,三维可视化大数据平台,智慧工厂VR虚拟仿真系统,大屏可视化展示系统

    哈尔滨3D可视化数字孪生工厂,三维可视化大数据平台,智慧工厂VR虚拟仿真系统,大屏可视化展示系统.数字孪生的概念近年来逐渐进入大家的视野,它是指利用数字模型.传感器数据.系统数据等将物理世界在虚拟空间 ...

  3. 大数据Flink电商数仓实战项目流程全解(一)

    项目整体思路和架构 项目最终成果展示: 本项目主要参考尚硅谷的Flink实时数仓项目完成,最近又重新跑了一遍,项目整体我会在后续上传到码云中, 也会逐步同步更新到博客中来,里面不仅包含了整体代码和整个 ...

  4. 淘宝、美团、滴滴分别如何搭建大数据平台?

    常规的大数据平台架构方案是基于大数据平台Lamda架构设计的.事实上,业界也基本是按照这种架构模型搭建自己的大数据平台. 接着我们来看一下淘宝.美团和滴滴的大数据平台,一方面进一步学习大厂大数据平台的 ...

  5. 知名大厂大数据平台搭建案例分享

    " 今天我们来看一下淘宝.美团和滴滴的大数据平台" 01 淘宝大数据平台 淘宝可能是中国互联网业界较早搭建了自己大数据平台的公司,下图是淘宝早期的 Hadoop 大数据平台,比较典 ...

  6. 饿了么大数据平台建设

    [导语]随着接入的需求方越来越多样化,对大数据的数据使用.数据存储与计算的需求也越来越多样化,同时业务飞速发展,集群的规模也急速扩大.如何在这样的场景下通过大数据平台,稳定支撑住业务的发展是一个不小的 ...

  7. 【推荐】智慧检察公益诉讼辅助快检AI人工智能大数据平台解决方案合集(共183份,928M)

    [推荐]智慧检察公益诉讼辅助快检AI人工智能大数据平台解决方案,检务保障系统,整体解决方案合集,公益诉讼方案,可视化检察管理,概要详细设计交付验收模板. 下载地址:https://download.c ...

  8. 亚信大数据平台产品经理 杨晋:大数据是怎么应用于技术方面的

    2014中关村大数据日于2014年12月11日在中关村举办,大会以大会以"聚合数据资产,推动产业创新"为主题,探讨数据资产管理和变现.大数据深度技术以及行业大数据应用创新和生态系统 ...

  9. SHAREit X Databend | 跨多云 Data Mesh 大数据平台: Why, What and How

    2022 年 10 月 22日,在 Data Infa 研究社第 5 期中,我们邀请到张韶全老师分享了<跨多云 Data Mesh 大数据平台:Why, What and How >受到大 ...

最新文章

  1. 柳传志:华为采取自主研发,联想通过并购实现品牌国际化
  2. cppunit linux,Linux中使用CppUnit工具
  3. docker安装_以简便的方式监控Docker容器中的ADF应用程序
  4. 【5】CCNA课堂第一天
  5. 漫谈概率 PCA 和变分自编码器
  6. Spring Boot 日志的使用及logback.xml的使用
  7. 64位内核开发第14将,路径的相互转换以及获取.
  8. nginx开机自启动
  9. 实验方法怎么写_小学作文怎么写?“把短句变长句”等3种方法帮孩子提高作文水平!...
  10. maya前台渲染_maya前台渲染MEL
  11. 中国姓氏数据库 java_中国姓的数据库(sql版),下你妹CSDN,又不是你的资源要你妹积分!...
  12. 小鸟云服务器如何安装rstudio-server?
  13. ad敷铜后还有部分飞线_PCB Layout软件分析对比(AD、Pads、Allegro)
  14. 基于Linux、QT、C++的“别踩白块儿”小游戏
  15. 基于51单片机的信号发生器设计
  16. ExecuteMethod
  17. BDP个人版产品体验报告:在线数据分析使用心得
  18. 线程间操作无效: 从不是创建控件的线程访问它。
  19. 遇上裁员,前端开发的糟心
  20. uniapp之unipush安卓app信息推送

热门文章

  1. Glimpse - Continuous, real-time object recognition on mobile devices
  2. 对象转字符串,字符串转对象
  3. css实现雪花背景图
  4. 基于树莓派+传感器+阿里云IoT的智能家居管理(代码实现)
  5. 微信群变“赌窝” 零容忍
  6. bfs dfs 搜索入门模板题
  7. 最全的—— ES6有哪些新特性?
  8. hdu5925 Coconuts
  9. 2021-05-12 MongoDB面试题 什么是聚合
  10. Python3.xprint时只回车不换行方法