随着公司规模的增加,对大数据的离线应用开发的需求愈来愈多,这些需求包括但不限于离线数据同步(MySQL/Hive/Hbase/Elastic Search 等之间的离线同步)、离线计算(Hive/MapReduce/Spark 等)、定时调度、运行结果的查询以及失败场景的报警等等。架构
在统一的大数据开发平台产生以前,面临一系列的问题:并发
为了解决上述遇到的各种问题,同时参考了业界其余公司的大数据解决方案,咱们设计并实现了大数据开发平台(Data Platform,简称 DP),经过可视化的交互界面,解决离线大数据计算相关的各类环境和工具。负载均衡
本文将介绍 DP 的系统设计以及在有赞的落地状况,内容包括:框架
图1 DP系统架构图运维
大数据开发平台包括调度模块(基于开源airflow二次开发)、基础组件(包括公共的数据同步模块/权限管理等)、服务层(做业生命周期管理/资源管理/测试任务分发/Slave管理等)和监控(机器资源/日志/基于预测的监控)。这些模块具体功能和职责为:<br/>分布式
任务调度模块:支持基于任务优先级的多队列、分布式调度。在开源的 airflow 基础上进行了二次开发,主要新增功能包括:高并发
图2 DP支持的离线数据同步方式(箭头表示数据流向)工具
服务模块:负责做业的生命周期管理,包括做业的建立(修改)、测试、发布、运维等,服务部署采用 Master / Slave 模式,参考图3所示。其中oop
图3 DP 部署图测试
监控模块:对调度集群的机器、资源、调度任务进行全方位的监控和预警。按照监控的粒度和维度分红三类:
_任务预测监控:_经过提早一段时间模拟任务的调度(不真正的跑任务),来预测任务的开始/结束时间,同时能够提前知道可能失败、超时的任务列表,进而在问题发生以前进行规避。
大数据开发平台的任务调度是指在做业发布以后,按照做业配置中指定的调度周期(经过 crontab 指定)在一段时间范围内(经过开始/结束时间指定)周期性的执行用户代码。任务调度须要解决的问题包括:
为了解决上述问题,咱们调研了多种开源框架(Azkaban/Oozie/Airflow等),最终决定采用 Airflow + Celery + Redis + MySQL 做为 DP 的任务调度模块,并结合公司的业务场景和需求,作了一些深度定制,给出了以下的解决方案(参考图4):
图4 基于Airflow + Celery + Redis + MySQL的任务调度
针对问题4,首先不一样类型的任务须要耗费不一样类型的资源,好比 Spark 任务是内存密集型、Datax 任务是 CPU 密集型等,若是将同一类任务集中在一台机器上执行,容易致使部分系统资源耗尽而另一部分资源空闲,同时若是一台机器的并发任务数过多,容易引发内存 OOM 以及 CPU 不断地切换进程上下文等问题。所以咱们的解决方式是:
图5 调度Worker机器的内存使用状况
DP项目从2017年1月开始立项开发,6月份正式投入生产,以后通过了N轮功能迭代,在易用性和稳定性方面有了显著提高,目前调度集群包括2台Master和13台 Slave(调度)节点(其中2台用于 Scheduler ,另外11台用于 Worker ),天天支持7k+的任务调度,知足数据仓库、数据中心、BI、商品、支付等多个产品线的应用。
图6 DP调度任务数趋势图
目前DP支持的任务类型包括:
离线数据同步:
Hadoop 任务:
其余任务:
DP 在通过一年半的不断功能迭代和完善以后,目前日均支持7k+的任务调度,同时在稳定性和易用性方面也有了较大的提高,能够知足用户平常对大数据离线开发的大部分使用场景。同时咱们也意识到大数据开发这块还有不少能够挖掘和提高的点,将来咱们可能会从这些方面进一步完善平台的功能和提高用户体验: