我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:小鱼儿主页 > 调度模块 >

每日7千次的跨部门任务调度有赞怎么设计大数据开发平台?

归档日期:07-09       文本归类:调度模块      文章编辑:爱尚语录

  随着公司规模的增长,对大数据的离线应用开发的需求越来越多,这些需求包括但不限于离线数据同步(MySQL/Hive/Hbase/Elastic Search 等之间的离线同步)、离线计算(Hive/MapReduce/Spark 等)、定时调度、运行结果的查询以及失败场景的报警等等。

  多个开发和调度入口,不同的业务部门之间的项目或组件很难复用,同时带来繁重的运维成本

  Hadoop 的环境对业务团队的同事来讲不友好(除了要熟悉业务以外还需要对底层框架有比较深入的了解)

  重复的开发工作(例如导表、调度等本来可以复用的模块,却需要在多个项目中重复实现)

  为了解决上述遇到的各类问题,同时参考了业界其他公司的大数据解决方案,我们设计并实现了大数据开发平台(Data Platform,简称 DP),通过可视化的交互界面,解决离线大数据计算相关的各种环境和工具。

  大数据开发平台包括调度模块(基于开源airflow二次开发)、基础组件(包括公共的数据同步模块/权限管理等)、服务层(作业生命周期管理/资源管理/测试任务分发/Slave管理等)和监控(机器资源/日志/基于预测的监控)。这些模块具体功能和职责为:

  任务调度模块:支持基于任务优先级的多队列、分布式调度。在开源的 airflow 基础上进行了二次开发,主要新增功能包括:

  增加多种任务类型(datax/datay/导出邮件/导出es/Spark等)

  根据任务的上下游关系以及重要程度,计算任务的全局优先级,根据全局优先级调度(优先级高的优先执行,低的则进入队列等待)

  跨 Dag 的任务依赖关系展示(基于全局 Dag,通过任务的读写Hive表信息建立跨 Dag 的依赖关系)

  基础模块:包括离线的全量/增量数据同步、基于Binlog的增量同步、Hive 导出 ES /邮件、MySQL 同步到 Hbase (开发中)等,参考图2。

  服务模块:负责作业的生命周期管理,包括作业的创建(修改)、测试、发布、运维等,服务部署采用 Master / Slave 模式,参考图3所示。其中

  Master 节点支持 HA 以及热重启(重启期间另外一台提供服务,因此对用户是无感知的)。Master 节点的主要职责是作业的生命周期管理、测试任务分发、资源管理、通过心跳的方式监控 Slaves 等。

  Slave 节点分布在调度集群中,与 Airflow 的 worker 节点公用机器。Slave 节点的主要职责是执行 Master 分发的命令(包括测试、机器监控脚本等)、更新资源(通过 Gitlab )等。

  监控模块:对调度集群的机器、资源、调度任务进行全方位的监控和预警。按照监控的粒度和维度分成三类:

  基础监控:结合运维监控(进程、IO等)和自定义监控(包括任务环比波动监控、关键任务的产出时间监控等)对DP的Master节点和Worker节点进行基础的监控和报警。

  日志监控:通过将任务运行时产出的日志采集到 Kafka,然后经过 Spark Steaming 解析和分析,可以计算每个任务运行的起止时间、Owner、使用到的资源量( MySQL 读写量、 Yarn 的 CPU / Memory 使用量、调度 Slot 的占用情况等),更进一步可以分析Yarn任务的实时运行日志,发现诸如数据倾斜、报错堆栈信息等数据。最后将这些数据存储在 NoSQL(比如 Redis )以进一步的加工和展示。

  任务预测监控:通过提前一段时间模拟任务的调度(不真正的跑任务),来预测任务的开始/结束时间,同时可以提早知道可能失败、超时的任务列表,进而在问题发生之前进行规避。

  现阶段已经实现的功能:分析可能失败的任务列表(失败的原因可能是DB的配置发生更改、上游的节点失败等)并发送告警信息;基于过去一段时间的运行时间数据,模拟整个任务调度,可以计算出任务的开始/结束时间以及超时告警。

  未来规划:任务的运行时长不是基于过去的数据,而是通过读取的数据量、集群资源使用率、任务计算复杂程度等多个特征维度来预测运行时长。

  大数据开发平台的任务调度是指在作业发布之后,按照作业配置中指定的调度周期(通过 crontab 指定)在一段时间范围内(通过开始/结束时间指定)周期性的执行用户代码。任务调度需要解决的问题包括:

  为了解决上述问题,我们调研了多种开源框架(Azkaban/Oozie/Airflow等),最终决定采用 Airflow + Celery + Redis + MySQL 作为 DP 的任务调度模块,并结合公司的业务场景和需求,做了一些深度定制,给出了如下的解决方案(参考图4):

  针对问题2,一方面通过 Airflow 提供的 Pool + Queue + Slot 的方式实现任务并发个数的管理,以及把未能马上执行的任务放在队列中排队。另一方面通过 Celery 可以实现了任意多台Worker的分布式部署(水平扩展),理论上调度没有并发上限。

  针对问题3,在 Airflow 本身支持的优先级队列调度基础之上,我们根据任务的上下游关系以及标记重要的任务节点,通过全局DAG计算出每个节点的全局优先级,通过将该优先级作为任务调度的优先级。这样可以保证重要的任务会优先调度,确保重要任务产出时间的稳定性。

  针对问题4,首先不同类型的任务需要耗费不同类型的资源,比如 Spark 任务是内存密集型、Datax 任务是 CPU 密集型等,如果将同一类任务集中在一台机器上执行,容易导致部分系统资源耗尽而另外一部分资源空闲,同时如果一台机器的并发任务数过多,容易引起内存 OOM 以及 CPU 不断地切换进程上下文等问题。因此我们的解决方式是:

  将任务按照需要的资源量分成不同类型的任务,每种类型的任务放到一个单独的调度队列中管理。

  基于这些配置,我们可以保证每台 Worker 机器的 CPU /内存使用率保持在相对合理的使用率范围内,如图5所示

  针对问题5,任务调度模块涉及到的角色包括 Scheduler (生产者)和 Worker (消费者),因为 Worker 本来就是分布式部署,因此部分机器不可用不会导致整个调度的不可用(其他节点可以继续服务)。而 Scheduler 存在单点问题,我们的解决方案是除了 Active Scheduler 节点之外,新增一个 Standby Scheduler(参考图3),Standby节点会周期性地监听 Active 节点的健康情况,一旦发现 Active Scheduler 不可用的情况,则 Standby 切换为 Active 。这样可以保证 Scheduler 的高可用。

  DP项目从2017年1月开始立项开发,6月份正式投入生产,之后经过了N能迭代,在易用性和稳定性方面有了显著提升,目前调度集群包括2台Master和13台 Slave(调度)节点(其中2台用于 Scheduler ,另外11台用于 Worker ),每天支持7k+的任务调度,满足数据仓库、数据中心、BI、商品、支付等多个产品线 DP调度任务数趋势图

  从 Hive 到 MySQL 的全量/增量数据同步(基于 Datax 二次开发)

  从 MySQL 通过 Binlog ,经过 Nsq/Hdfs/MapReduce 增量同步到 Hive( Datay ,自研)

  从 Hive 同步到 ElasticSearch (基于 Datax 二次开发)

  将 Hive 表数据以邮件形式导出(支持 PDF/Excel/Txt 格式的附件)

  DP 在经过一年半的不断功能迭代和完善之后,目前日均支持7k+的任务调度,同时在稳定性和易用性方面也有了较大的提升,可以满足用户日常对大数据离线开发的大部分使用场景。同时我们也意识到大数据开发这块还有很多可以挖掘和提升的点,未来我们可能会从这些方面进一步完善平台的功能和提升用户体验:

  提供用户首页(空间),提供日常运维工具和管理页面,更加方便任务的集中管理

  任务日志管理优化(包括快速定位出错信息/拉取和分析 Yarn 日志等)

  :大数据平台是有赞共享技术的核心团队之一,该团队主要由数据技术、数据产品、算法挖掘、广告平台四个小团队组成,目前共有34位优秀的工程师组成。

  目标:调度的业务类型是针对ETL数据抽取任务、个性化推荐的离线任务、每天的报表、每周的统计报表、月级别的统计报表等,小时级的日志清洗任务等能够按照用户的配置,准时进行调度。调度的任务主要是一些脚本文件...

  Oozie简介Oozie是大数据四大协作框架之一——任务调度框架,另外三个分别为数据转换工具Sqoop,文件收集库框架Flume,大数据WEB工具Hue。它能够提供对HadoopMapReduce和P...

  在大数据的集群环境中,经常用到的任务调度框架有如下几个,根据公司的业务的需要选择适合自己的业务调度的框架,调度框架anzkaban,crontab(Linux自带)、zeus(Alibaba)、Ooz...

  案例来源:@洪斌案例地址:数据仓库处理:近源数据层→数据宽表→基础指标表1)近源数据层:封装中间...

  摘自微信公号:慧翔天地PMP,可向小助手领取项目管理全部书籍和文档模板。如有不当,告知必删。背景:老黄是项目经理,带领公司非常重视的一个项目,领导对老黄寄予重望;启动大会时各部门主管都表态会积极配合,...

  有时,我们需要程序进行不同的调度进行执行,比如每天早晨10点执行、每隔10分钟执行一次、今晚20:00执行等。所以,此处通过开源的作业调度框架Quart快速完成任务调度的工作.基本原理:  1、创建调...

  实习生张大胖 这是个代码写得很烂的电商系统,只要运行一段时间,服务器就会出现OutOfMemory。 别人都忙得四脚朝天,于是实习生张大胖被抓了壮丁去研究为什么会出现OOM。 刚入行的张大胖技术水平一...

  案例地址:有赞是新零售的软件服务商,为商户提供强大的微商城和完整的移动零售解决方案,帮助互联网时代的生意人管店、管货、管客、管...

  1.前言任务调度系统在大数据平台架构中扮演着比较重要的角色。下图是引自网易的猛犸大数据平台lambda架构图。其中的Azkaban就是其任务调度组件。概括来说,任务调度在大数据平台中所扮演的角色主要有...

  前言    对于一家资讯媒体公司而言,爬虫可以说是第一道,也是最重要的补给线与产品线。爬虫聚焦于开发与维护各类网络信息抓取工具,通过获取到数量大、质量高的数据,为运营、算法、大数据等各个部门提供数据支...

  作者:cryanimal 微信:lazytest导语跨部门沟通是管理者常规事宜之一,也是比较容易遇到问题并加以解决的地方。本文将围绕跨部门沟通,总结一些原则、策略、方法、工具。①常见障碍②必守原则③如...

  首先要项目正式开始前召开启动会是非常有必要,即是告知利益相关方工作的开始,也告诉相关的执行人员及支持人员需要为该项目进行付出。确认项目计划以及需要对方支持协调的的事物;如若相关人未到场,建议为项目...

  一、初步认识OozieOozie是一个分布式大数据调度框架,在oozie中,有两个重要的概念,工作流和调度。所谓工作流,就是将一系列作业按照一定的流程进行编程,按照自己的意愿去工作;对于调度,如果大家...

  .5.2.1.1调度系统Kepler整体设计该企业调度系统的整体实现思路:用SpringQuartz来负责定时任务这一块,用定时任务来周期性更新实例和容器的状态,即用定时任务做调度系统的引擎。用状态管...

  无论是管理学界还是现实中的企业,跨部门流程都是一个经常提及的概念,比如OTC(订单到回款)、IPD、ISC等,都会被许多人认为是跨部门的流程,这样说当然没有问题,因为每个人说话是有语境的,也就是以一定...

  工作流调度器azkaban1、概述1.1为什么需要工作流调度系统 1、一个完整的数据分析系统通常都是由大量任务单元组成:shell脚本程序,java程序,mapreduce程序、hive脚本等 2、各...

  摘要: 对于阿里云大数据数仓建设性能优化而言,主要可以从调度优化、模型优化、同步优化以及任务优化这四个方面着手。其实,对于性能优化而言,最终还是会归结到“资源”之上,所以资源是否足够,分配是否合理也是...

  今天为什么要写点东西呢,因为我觉得自己现在开始有意思的去培养出写代码之外的能力,所以给自己定下一个目标,每个星期至少写点东西来。聊些什么呢?那就聊自己的状态吧!因为觉得最近的状态自己特别二,干什么事情...

  MapReduce运行架构前言Hadoop1.x版本Hadoop2.x版本前言  某天,某研究机构设计了一款私人飞机图纸,之后某公司根据该图纸制作出一架私人飞机.然后某位有钱人士觉得这架飞机非常好,就...

  设计目的:重新整顿流程杂乱、效率不高的公司现状。针对对象:toB型的公司(包含产品、研发、商务、客服、运维等多个部门)。不足弊端:需重新适应新流程的节奏,一开始效率会不如以前;进展中需即时调整。......

  点赞作为一个高频率的操作,如果每次操作都读写数据库会增加数据库的压力,所以采用缓存+定时任务来实现。点赞数据是在redis中缓存半小时,同时定时任务是每隔5分钟执行一次,做持久化存储,这里的缓存时间和...

  大规模网络搜索的设计大规模搜索引擎的逻辑结构上图来自1998年Google两个创始人发表的论文。crawler:爬虫,从互联网上获取文档信息index:读取这些信息,并记住哪些单词出现在哪些文档中,称...

  场景描述:   近期我被安排帮助楼上的同事开发一个后台系统和一个前台系统,后台系统放到他们已有的系统上就行,算是一个模块;而前台系统,是一个新的独立的系统.我平时都是组长让我完成一个功能或者接口什么的...

  本文主要分享了我在设计评论模块中的一些心得,希望对读者有些许帮助。关于这种常用功能,查了许多资料又基于公司的业务场景 1.由用户发表作品 其他已注册用户在浏览个用户发表的作品时可以进行点赞评论(同时可...

  有向无环图任务调度算法DAG-----图论中,如果有向图中任意一个顶点从该点出发经过任意边都无法回到该点,那么这个图称为有向无环图。DAG常常用于多个任务的调度,各个任务之间可能存在依赖关系。所以一个...

  京东10亿级调用量背后的高可用网关系统架构实践!一个简单可参考的API网关架构设计

  一、任务调度1、原理图二、crond任务调度crontab进行定时任务设置1、概述任务调度:是指系统在某个时间执行的特定的命令或程序。任务调度分类:1)系统工作:有些重要的工作必须周而复始的执行。如病...

  最近大数据特别火,所以笔者也想蹭蹭热度,来点大数据的内容。由于大数据涉及的东西太多了,一两篇文章肯定说不完,所以这个系列到底有几篇文章,现在也确定不了,写着看吧。我尽量写一些干货,一些在工作和开发中用...

  1.    任务依赖需求描述:例子:一个作业分为如下子任务:任务1,任务2,任务3,任务4执行的顺序为,任务1---》任务2,任务3---》任务4其中任务2,任务3可以并行执行,我们用下图描述:   ...

  最近在一个项目中用到了MySql的任务调度,为方便以后学习,在这简要的梳理复习一下。MySQL提供了EventScheduler,可以根据时间调度来运行任务,运行一次或多次。...

  点赞系统设计点赞在社交类平台中,作为一个最常见的操作,每天会有成千上万的操作。如果每次都将操作写入数据库,那么对于数据库会形成很大的操作负担,因此,本文讲述如何通过Redis构件一个定时写入数据库的点...

  1.是否可以正常点赞和取消;2.点赞的人是否在可见分组里;3.点赞状态是否能即时更新显示;4.点赞状态,共同好友是否可见;5.不同手机,系统显示界面如何;6.性能检测,网速快慢对其影响;7.点赞显示的...

  点赞功能的设计每一次点赞,需要记录:(1)谁点的赞;(2)为那篇文章点的赞;(3)点赞时间(4)是否已经取消点赞 数据表设计点赞记录表列名数据类型说明idN数据表iduser_idN用户idvote_...

  任务调度中心构建任务调度中心构建系统架构搞起来一、创建数据库表二、执行器实现三、效果设计原理参见下篇文章amp;amp;amp;a...

  最近研究了下异步任务神器-Celery,发现非常好用,可以说是高可用,假如你发出一个任务执行命令给Celery,只要Celery的执行单元(worker)在运行,那么它一定会执行;如果执行单元(wor...

  jquery/js实现一个网页同时调用多个倒计时(最新的)nn最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!nnnn//jsn...

  这一篇,代码折腾的时间较长,完成之后都是一些小细节,主要有三:n1、引入的依赖错误;n2、启动配置错误;n3、xml文件的mapper命名空间错误。n一、完整的pom.xmlnn...

  本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。1、 Esp8266之 搭建开发环境,开始一个“hellow worl...

  扫二维码关注,获取更多技术分享nnn 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...

  采用EasyUI 1.4.x 版本,默认default风格,异步加载页面,多Tab页展示,使用JSON文件模拟从后台动态获取数据。...

  接着上次的图书管理系统rnrn修改完问题后把SpringBoot成功部署到了服务器上rn测试了下api接口,能正常访问rn那么下面就是在服务器上部署前端的vue.js了rnrnrn这里的话我们要明确一...

  如何让Java写的程序,脱离Eclipse在别人的电脑上运行?阅读数768

  Python使用SMTP发送邮件(163,yeah等网易邮箱已测试可以)阅读数636

本文链接:http://i-zyczenia.net/diaodumokuai/917.html