本文是贝贝大数据团队数据中台建设阶段性总结,借此机会感谢现在仍然携手以及曾经一起并肩的小伙伴的努力!
贝贝集团创建于2011年,当前处于业务多元化阶段,旗下拥有贝贝网(母婴家庭购物平台)、贝店(会员制折扣商城)、贝仓(品牌特卖平台)、贝省(购物省钱平台)、贝贷(消费金融平台)等业务。进入业务多元化阶段后,如何高效高质量支持集团各业务,对于大数据团队来说是新的挑战。
“中台”可能是近几年互联网技术领域最火的概念之一,“技术中台”、“业务中台”、“数据中台”、“算法中台”,各种中台如雨后春笋般涌现,大厂小厂也纷纷启动中台战略,似乎是包治百病的神丹妙药。然而,最近爆出的中台失败案例:《中台翻车纪实:一年叫停,员工转岗被裁,资源全浪费》、《中台搞了2年,项目叫停,CIO被裁!本以为中台是道送分题,没想到是送命题!》,又让中台陷入了质疑和尴尬。
To be or not to be, that is a question?
在这个问题想明白之前,我们并没有贸然启动项目,而是审慎地关注业界的动态,结合外部经验和集团内部实际情况进行分析。
谋定而后动,我们的决策:干!
决策的依据,是针对以下几方面进行了充分的讨论和思考:
1、价值收益:为什么要做?做了有什么用?数据中台能一定程度上解决目前的问题和挑战,带来质量、效率、成本方面的收益。
2、技术储备:最佳实践是什么?技术方案明确吗?数据中台建设主要依赖大数据平台的和数据仓库领域的技术,在相关领域我们已经具备一定的理论和实践储备。
3、组织保障:数据中台是系统性的项目,贯穿整个大数据业务和技术栈,需要基础平台、数仓、BI、搜索、推荐、广告、风控等上下游团队的配合和支持,跨部门协同才能拿到结果。组织协同非常关键,这也是很多公司数据中台项目落地失败的原因之一,而贝贝整个大数据技术和业务都归属于同一个大部门,天然具备协同作战的组织优势。
大数据团队要把数据和技术有机结合起来,才能让数据成为生产力,发挥其价值。我们一直致力于生产高质量的数据能源和打造更加强大的技术引擎,结合业务应用场景,通过数据赋能商业、创造价值。
数据是能源,技术是引擎, 赋能商业、创造价值。
大数据系统由上下游三层组成,从下往上依次是:
我们给数据的一个定义:数据=对业务过程的记录。用数学公式表示,更加直观,数据是业务的积分
从公式可以得出
怎么理解呢?简化技术细节举个例子,假设业务处于平稳状态,每天的DAU和订单数是个常数,但大数据集群存储的流量数据和交易数据都会线性增长,实际的情况涉及全量/增量建模,数据分层加工,会更加复杂。
数据灾难:数据增长快于业务增长,数据价值密度下降是自然趋势
如何应对数据价值密度下降?数据中台+价值变现
好的数据中台,能提供高质量数据和高效率的平台工具,有助于对数据价值的深度变现
分析贝贝的实际情况,我们认为当前重点目标是:降低成本、提升效率、更高质量,各维度可以拆解如下:
基于核心目标,我们启动了如下一系列技术项目,本文后续会对重点项目展开介绍
这些项目并非孤立,在大数据体系里各司其职、互相配合,下图展现各项目在体系中的角色
1、背景
贝贝集团之前的数仓整体架构设计于2016年,这四年里支持了各类业务的发展,基本解决了“看数据”的问题。随着业务的快速发展迭代,数据的重要性也越来越突出,业务对数据的需求已经从“看数据”到“用数据”阶段了。现有的这套数仓模型已经不太能满足业务的发展要求,并且随着数据量和任务的增多,管理维护成本也直线上升,现有数仓体系的局限性也越来越突出,急需基于当前业务要求和未来的发展,以及新的技术和方法论,对数仓整体模型进行重构。
局限性主要体现在2个方面:
2、建设思路
严格遵循数据体系化建设的模型分层,数据分域的思路,借鉴阿里onedata数据体系建设方法论,重构整体数仓
1)模型分层
按照以上的模型层级,确定每一个层级的作用和建设方式,严格规范各层级数据的依赖关系,分层建设。通过统一数据接入和明细层的建设规范,建设完整规范、稳定可靠的基础数据(ODS/DIM/DWD);以基础数据为依托,通过对各类业务数据应用场景的沉淀,抽象出通用的指标和逻辑,建设准确丰富、统一通用的指标体系;以统一通用的指标体系为基础,结合具体的业务应用场景,搭建数据集市、报表和数据接口等,为包括BI、风控、算法等团队提供灵活多样、快速响应的数据应用层。
2)数据分域
根据当前的实际业务情况,结合业务系统的来源,重新划分为以上12个数据域。同时对各个数据域内的业务活动事件进行抽象,生成对应的业务过程。遵循数据域内高内聚、数据域之间低耦合的设计思想,采用基于业务过程抽象的事实表设计方法建设DWD数据明细层。
3)onedata指标体系化
采用阿里onedata指标定义规范,结合具体的数据应用场景,抽象出每个数据域的每个业务过程下的原子指标、派生指标、时间周期和修饰词,确定原子指标和派生指标的生成逻辑,制定指标的命名规范,建设统一通用的指标体系。
我们通过指标字典来管理指标体系,涵盖指标体系的配置、指标的增删改查。
3、应用效果
使用新公共层进行开发,有以下收益:
1、背景
有限的技术交付能力与越来越多的实时数据需求矛盾凸显,因此我们探索更高效的实时计算平台,这时候Flink的几个特性引起了我们的关注。
2、平台建设
我们主要做了2件事情:
(1)实时平台
(2)实时数仓
实时数仓借鉴离线数仓“分层+分域”的思路,建设实时数据公共层,避免烟囱式开发。
3、收益
1、背景
随着业务增长,更大的数据计算量和更多的业务应用场景,对大数据集群资源提出更高的要求,除了增加物理资源,探索如何提高资源利用率是更具创新性的解决方案。
基于分析,我们发现:
因此,我们提出了基于任务执行历史的资源消耗信息,自动化智能化的计算资源优化方案,为每个作业按需分配资源,实现计算资源的更优分配。
2、原理
本系统分为筛选,优化,验证和评估四个部分,对map个数、map内存、reduce内存等参数进行优化。
3、效果:集群资源利用率提升15%左右
1、背景
大数据存储与计算持续增长,且增长速度有加快的态势。我们猜测有大量的任务其实已经没用了,却还在生产环境周期性执行,造成浪费的原因可能有:
在2019年Q4,集群资源已接近安全水位线,我们做了一轮任务“大扫除”,这个突击动作完成后,释放了可观的机器资源,解除了当时的资源紧缺风险。
除了解决资源紧缺之外,我们额外得到了2点knowhow:
1、验证了我们的设想,确实有大量的任务处于无效状态
2、在做任务清理的过程中,沉淀的方法论,为产品化奠定了基础
产品化地做好任务治理,减少资源浪费,核心是构建元数据体系。元数据(Metadata)是关于数据的数据,元数据打通了源数据、数据仓库、数据应用,记录了数据从产生到消费的全过程。
2、解决方案
1)采集数据:采集从生产到消费全链路尽可能多的数据,包括任务执行资源消耗、hive表/文件元数据(存储大小、访问情况、生命周期、增长速度)、表之间的依赖关系、表和任务的对应关系、接口调用频次、报表/数据产品使用频次等;
2)重建链路:根据采集到的点(文件/任务/接口/数据产品)信息和边信息(任务依赖/表和文件对应关系),重建资源价值传递链路,将终端节点的使用情况反向传播到上游链路
3)成本评估:将大数据集群的机器成本换算到计算单元成本(1CU的成本)和存储单元成本(1G的成本),总成本按资源消耗比例分摊到各个任务和表
4)自动化治理:依据使用情况和成本,制定治理规则,符合规则的表和任务,列入待治理队列。等待期内owner可以干预,等待期结束时自动清理
3、应用情况
1)可视化:资产盘点和评估可视化
2)全链路:数据全链路的追踪和溯源
3)智能化:任务治理的自动化智能化,治理闭环体系能力
1、思路
加快任务产出,有2个提升方向:
(1)逻辑层面——脚本并行执行:hiveSQL动则数百上千行,大任务往往包含逻辑独立的中间表,中间表之间存在非强依赖关系,代码段之间从串执行改成并行执行
(2)物理层面——更高效的执行引擎:hiveSQL解析为MR任务,MapReduce编程模式比较简单,执行效率较低。可以探索更高效的执行引擎,比如Spark
2、脚本并行执行
原理:解析hive任务脚本,拆分为多个子任务,建立子任务间的依赖关系DAG,有序执行子任务,做好并行和顺序控制,同时要考虑子任务失败等异常情况
举个例子:下图为某报表任务,SQL脚本包含多个独立的逻辑块,大数据调度系统提交任务执行时,会自动将其拆分为8个可并行执行的子任务
效果:开启并行执行功能以后,任务执行时间从1个小时左右降低到15分钟左右
3、引擎升级
之前绝大部分ETL任务都是基于Hive,我们尝试替换为spark。为什么选spark?
效果:升级spark后,任务耗时降低了一半左右
04
在建设数据中台过程中,有两点感触颇深:
虽然目前取得了阶段性成果,但数据中台需要持续迭代,还有很多更具价值和挑战的方向值得我们去探索。
微信扫描二维码,关注我的公众号