精彩回顾
近期,食行生鲜的数据平台工程师单葛尧在社区线上Meetup上给大家分享了主题为《ApacheDolphinscheduler在食行生鲜的落地实践》的演讲。
随着大数据的进一步发展,不管是离线任务量还是实时任务量都变得越来越多,对调度系统的要求也越来越高,不仅要求系统稳定还要求操作简单,上手方便。
而ApacheDolphinscheduler就是当下非常流行且好用的一款调度系统。首先它是分布式运行且是去中心化的,其次有一个非常好的页面,使得调度的任务变得非常容易上手。
讲师介绍
单葛尧
食行生鲜数据平台工程师
文章整理:硕磐科技-刘步龙
今天的演讲会围绕下面三点展开:
背景介绍
实施落地
元数据系统Datahub与Dolphinscheduler集成
背景介绍
我司食行生鲜是一家采用“预订制”模式,通过全程冷链配送和社区智能冷柜自提方式,为用户提供优质生鲜服务的新零售企业。
随着业务发展,大量的离线同步及计算任务开始对我们的数据架构的易用性与稳定性带来了挑战。
01数据架构
上图是我们目前的基础架构体系,主要是批处理和流处理。批处理主要是以Hive和Spark为主的的全量数仓的分级计算。流处理以Flink为主,主要用于用户轨迹实时ETL和实时业务监控,目前采用美柚开源的巨鲸平台,后续会陆续迁移Apache新晋项目StreamPark中,它支持多个版本的Flink,提供一系列开箱即用的连接器,大大减轻了开发部署实时任务的复杂度。
我们的数据来源有MySQL、PostgreSQL、物流供应链端的SQLServer数据、同行的数据及风控类的数据。相对应的日志类数据非常多且复杂,故数据类型也多种多样。
我们的业务主体有两种:业务产生的数据,比如说用户去下单,用户的各种余额,积分优惠券;**埋点系统的轨迹数据,**比如说用户的点击、下单、进入商品详情等行为轨迹类操作;
一般来说,T+1的数据采用离线计算,轨迹数据用的是实时计算。
抽数工具是以Sqoop为主,其次是binlog消费,对于部分不支持的数据源,就用了ApacheSeaTunnel。
经过数仓的复杂计算之后,我们的下游数据的OLAP场景主要以TiDB和GreenPlum为主。
TiDB运用于业务的查询,比如查询近7日某商品的购买量;
GreenPlum主要以内部的看板为主。比如集团核心的财务指标,运营部门的运营成果及绩效指标;另外会用HBase存储一些维度数,ElasticSearch存储一些算法模型训练出的画像结果。
Kylin用于指标体系。它服务于我们内部的指标计算。比如站点状态的监控,展现业务成果的各维度。比如今天的实时订单情况,是否需要向供应链增派人力,最近下单的数据流向是否有猛增等现象,以此来调整销售策略。
02DMP的能力与组成
任务数量随着业务发展日益增长,数据资产的管理、数据质量的监控等问题愈发严峻,DMP(DataManagementPlatform)的需求应运而生。
一般而言,DMP衍生出数据应用,数据应用包括以下能力:
决策支持类:主题报表(月度/季度/年度/专题)、舆情监控、热点发现、大屏数据可视化展示等;
数据分析类:交互式商业智能、OLAP分析、数据挖掘、数据驱动的机器学习等;
数据检索类:全文检索、日志分析、数据血缘分析、数据地图等;
用户相关:用户画像服务、用户成长/流失分析及预测、点击率预测、智能推荐等;
市场相关:数据服务于搜索引擎、数据服务于推荐引擎、热点发现、舆情监控等;
制造生产相关:预测性维护、生产过程实时数据监控、数字孪生等;
实施落地
日益增长的业务系统数据催生了对调度系统的高可用要求,原有自研的单节点调度系统不再适合我们当前的业务体量。
我们开始在市面上调研新的调度工具,然而我们不仅需要调度系统是分布式高可用,还能简单易用,对无编程经验的分析师们提供友好的交互体验,对开发人员也可以支持高扩展性,便于后期可以随着业务增长良好的扩展其可支持的任务类型及集群规模。
01选择ApacheDolphinScheduler
最终我们选择了海豚调度,然而对于我司调度系统的发展经历了几个工具的迁移。
最开始用的是Azkaban,因为一些历史原因,后续弃用了Azkaban;随后自研了一套调度系统,而随着业务数据的激增,自研系统存在的一个致命问题:该系统为单点式,没有办法扩展资源,只能单机运行;
去年六月份,我们对AirFlow和Dolphinscheduler做了一个调研。面对业务场景,我们希望以SQL的形式去定义flow;希望系统以分布式的形式运行,而不是单机,以此来解决单机的瓶颈问题;
AirFlow的技术栈是Python,而公司主要是以Java为主;
经过比较,我们最终选择了Dolphinscheduler。
02实施落地
去年6月,首次在生产环境接入了DolphinScheduler的1.3.6版本,经过业务的锤炼与社区的共建,现已成功更新至3.0.0,至今服务于我司一年有余,平均每日稳定运行+任务。
03任务执行
我们在使用DolphinScheduler时,主要使用其Shell组件,内部封装了Hadoop相关Tools,用来通过Shell提交相关SQL,并指定任务提交的Yarn资源队列。
我们根据DolphinScheduler内部的五个优先级HIGHEST、HIGH、MEDIUM、LOW、LOWEST也分别创建了五个对应的Yarn资源队列,便于根据流程的优先级提交到指定的优先级队列,更好的去利用并分配资源。
在原有的Worker线程池的等待队列中,把从原有的LinkedBlockingQueue转换PriorityBlockingQueue,以实现超Worker其exec-threads时可以依照其设定的优先级重新排序,实现高优先级任务在出现异常时,可以在资源较满的情况下实现“插队”效果。
04告警策略
DolphinScheduler提供了开箱即用的多种告警组件。
Email电子邮件告警通知
DingTalk钉钉群聊机器人告警,相关参数配置可以参考钉钉机器人文档。
EnterpriseWeChat企业