有赞大数据实践: 敏捷型数据仓库的构建及其应用

2023-11-20 20:41

本文主要是介绍有赞大数据实践: 敏捷型数据仓库的构建及其应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

有赞大数据实践: 敏捷型数据仓库的构建及其应用

  • 有赞大数据实践: 敏捷型数据平台的构建及其应用

    • 前言

    • 数据仓库设计

      • 总体架构

      • 数据仓库实例

      • 基础指标层

      • 分层的好处

      • 数仓工具

    • 数据仓库与数据分析

      • 即席查询系统

      • 多维分析系统

      • 搜索分析系统

      • 固定报表系统

    • 数据仓库在信息检索中的应用

    • 小结

前言

互联网公司一般发展迅速. 一方面, 业务飞速发展, 当前应用的形式和模型每天都在变化; 企业的产品也在经历不断的下线上线过程. 数据仓库如何拥抱变化, 是难点之一.

互联网的运营人员从了解经营状况转化为精细化运营, 这就于要求数据仓库具有提供高效明细数据能力, 数据仓库如何在庞大数据量的前提下, 实现满足不同层次的数据提出和分析, 是难点之二.

数据经过ETL最终到达使用数据者手里; 提取数据和提出数据的需求往往来自不同的部门和出于不同的目的. 这一般会导致数据口径不一致, 数据含义模糊, 甚至数据正确性很难校验. 数据仓库如何保证数据口径一致, 数据路径可追溯性, 是难点之三.

数据仓库的应用领域除了各个业务部门还包括技术部门本身. 由于海量数据处理, 互联网的技术架构越来越依赖大数据平台的支持. 一个点上平台每天都会有数以万记的店铺和商品更新, 数以亿计的用户日志, 订单数据等. 这些数据在毫无保留的通过消息队列汇总到数据仓库中. 如果使用数据仓库进行再生产是技术架构重点考虑的事情. 数据仓库拥有其他数据平台无法比拟的横向扩展和迭代计算能力, 可以直接或者间接面向用户提供数据服务. 这也是大数据的机遇之一.

数据仓库设计

总体架构

屏幕快照 2016-10-23 下午1.13.23

存储层 主要解决ETL问题, 如何正确的埋点, 数据稳定正确的传输, 提供可靠的存储计算环境等等. 这部分内容比较复杂, 本文不重点阐述.

数据仓库层 主要提供数据模型和数据工具两个内容. 数据模型解决数据可用的问题, 数据工具解决数据易用的问题. 本文会重点介绍数据模型的设计方法和数据工具的作用.

数据分析层 主要解决各种角色如何使用数据仓库的问题. 后面有章节举例说明每个分析工具的优势和适用范围.

数据仓库实例

数据源主要有两种来源, 文件和DB. 通过消息队列收集到hadoop平台. 数据仓库的第一层是近源数据层, 这一层基本上和数据源保持一样的字段结构. 我们看一下一个例子. 这个例子阐述我们如何构造"订单商品中间层".

屏幕快照 2016-10-23 下午1.42.40

业务层有数十个基本表. 他们通过收集工具, 消息队列导入近源数据层中. 这个过程需要做如下几件事情:

  1. 将物理分片的分布式DB映射成一个Hive表

  2. 根据表的内容选择合适的Hive分区键

  3. 对于缓慢变化维进行处理, 让数据表可以反映变化

  4. 对于日志进行基本的处理映射成Hive表

近源数据层不做如下事情:

  1. 脏数据处理;

  2. 数据表间一致性处理;

  3. 不同业务表的合并.

我们对于近源数据层的定位是可以"快速"的构建基础数据平台. 不做业务相关的处理可以让这部分的工作专注在大数据架构正确性和稳定性的问题.

近源数据层出现以后, 实际上我们已经可以开始主要的数据分析工作了. 但是我们引入了"中间层", 它的定位是"操作简单, 执行快速, 屏蔽错误, 统一口径".

这个过程主要完成如下几个事情:

  1. 合并不同业务为统一过程;
    业务数据有很多独立的市场或者版本, 他们客户和用户不同, 但是工作过程是一样的. 再比如app和pc的日志独立记录, 但是可以在一定程度上合并.

  2. 屏蔽脏数据, 比如典型的测试数据.

  3. 冗余字段. 把常用的join操作在中间层封装.

我们看一下订单宽表的实现过程. 订单宽表是是以订单为主键的表. 它包含几方面的信息:

  1. 基本的订单统计, 主要是订单主要信息表提供;

  2. 订单的聚类分析, 比如订单的城市分布, 年龄分布分析, 主要是订单详细信息表提供;

  3. 订单风险分析, 这就依靠维权订单表来提供;

  4. 等等

这样我们产生的订单宽表在一定程度上满足绝大多数的数据分析问题.

  1. 首先, 是数据口径的问题, 计算宽表的时候会根据业务需求生成很多冗余字段, 比如对于疑似刷单交易, 很多业务如果都实现一遍的话, 势必会导致口径问题, 在设计订单宽表的时候我们根据风控模型加入一个字段是否为空壳交易. 这样在统计时候各方的口径都会一致. 同样脏数据问题也是通过这种方式解决.

  2. 其次, 多表join问题, 订单宽表一定程度上聚合常用的字段, 满足80%的数据分析需求. 加上合理的分区设计, 基本上查询是非常快速的.

  3. 最后需要说明的是, 我们没有为所有近源数据表都封装中间层. 购物车信息我们就没有完全封装, 因为他们的分析不常用. 订单宽表的设计需要做一个折中. 一方面设计完备的数据仓库是不现实的, 另一方面订单宽表的前提是足够常用, 对于不常用的数据我们的数据平台是支持直接操作的. 这符合互联网设计产品的一般思路.

基础指标层

基础指标层放映了对一个实体的基本衡量, 是BI分析的基础. 如上图所示, 在订单宽表的基础上我们提取出 消费者指标表商户指标表商品指标表 等. 比如在商品指标表中, 我们会针对商品的销量, 维权数等对商品做基本的画像, 这样应用就可以非常方便的筛选合适的商品.

分层的好处

屏幕快照 2016-10-23 下午5.57.23

我们可以看到, 从 近源层 到 指标层 层次越高易用性越强, 层次月底, 灵活性就越强. 这样的设计可以保证紧急的分析可以快速响应, 同事稳定的数据可以通过高层次的数据模型高质量保证.

同时, 我们意识到数仓模型是迭代的, 逐步晚上的过程. 数据分析的工作不断的反馈到数仓建设中.

数仓工具

有了可供操作的数据模型. 基本上我们可以解决数据仓库的主要问题. 数据仓库另外一个问题是溯源问题.

  1. 一方面溯源有利于我们清晰的了解数据的血缘关系, 方便数据问题的追查.

  2. 另外一方面, 是数据质量的问题. 想建立一个稳定的数据质量体系保证数据仓库常年稳定有效实践过程中非常困难. 基础设施的问题, 业务的变迁, 脏数据的产生都会导致正在使用的数据仓库的质量问题. 数据仓库另外一个要求是随时可以跑全量数据.

我们看一下我们设计的数据地图的样子:

  1. 数据地图可以用于查看所有报表的路径和执行过程. 这样我们可以追查特定字段的数据来源, 广泛用于对账和对数.

  2. 数据地图可以提供数据任务间的依赖关系, 从而进行快速的全局数据的修补. 举个例子, 如果我们在10.30日发现9.1日的日志里面存在大量的攻击日志(无效日志)导致很多中间层, 报表数据不准, 我们只需要把近源数据表修复, 然后设定开始和结束的日期, 所有依赖它的任务都会重新执行.

数据仓库另外一个组件是元数据管理系统. 它的主要作用:

  1. 提供帮助文档, 给出所有可用表格的规格和口径说明;

  2. 规范报表的口径, 避免口径歧义.

数据仓库与数据分析

互联网的运营人员从了解经营状况转化为精细化运营. 精细化 首先体现在深度. 传统的高度汇总的知识性数据不能满足目前的日常需求, 更需要细粒度的探索性数据. 其次精细化体现在广度上面, 需要BI支持不仅仅是管理层或者决策人员. 普通的产品运营, 市场运营, 产品经理都会分析数据分析产品的受众, 分布等数据.

我们提供4种不同的工具来满足BI服务.

  1. 即席查询系统

  2. olap系统

  3. 定制搜索和报表系统

  4. 搜索引擎

即席查询系统

即席查询系统 的使用者是专业的数据分析人员. 它的定位是数据仓库的操作平台.这是使用最广泛的系统, 因为它不需要开发任何工作. 数据仓库ready后就可以使用. 数据仓库的良好设计和数据字典的文档作用使得即席查询系统非常容易上手.

这里我们强调一下BI过程和数据仓库设计的互动性. 对于重要的数据中间层, 我们提供基本的BI基础表. 比如订单指标表和商品指标表.

接着上面的例子, 我看一下BI过程如何利用数据仓库的. 假如我们需要分析店铺的各项指标.


这些指标可以非常迅速的从订单宽表中算出来. 不要考虑复杂的交易异常, 脏数据等问题.

另外由于店铺指标, 用户指标等这些常用的BI表又可以作为基础指标中间层沉淀下来, 用于更高纬度的数据分析.

因此我们看到数据仓库数据整合的3个层次:

  1. 近源数据层作为数据源, 主要是不常用的, 简单的数据.

  2. 数据中间层, 使用频率很高的基于主题的数据.

  3. 基础指标中间层, 基于数据中间层的基础聚合, 使用频率更高. 简化复杂BI过程.

多维分析系统

多维分析系统 的使用者是一般运营人员. 它是特定的中间层图形化表达. 多维分析系统实现的是对某些指标的特定维度的聚合分析.

多维分析系统我们是基于kylin引擎做的, 是一种多维度联机查询系统. 对于每个主题(比如订单主题)提供基于维度筛选和各种聚合功能(比如最大, 最小, 求和等). 并通过表格和图形化方式展示.

接着上面的例子. 我们打算做一个订单主题的多维分析系统. OLAP模型如下:

屏幕快照 2016-10-23 下午6.08.03

这样我们就可以轻松的回答如下几个问题.

  1. 3C类目的维权订单趋势是怎么样的?

QQ20160831-2@2x

  1. 各种支付方式在每个省的分布式怎样的?
    QQ20160831-3@2x

多维分析系统的缺点是没有即系查询系统灵活. 由于他需要预加载数据对于维度特别高的查询支持也不是很好.

搜索分析系统

搜索分析是基于对于纬度建立索引的查询系统. 他可以满足对于不同指标的多级筛选, 直到筛选出合适的候选集. 如下是一个例子.
屏幕快照 2016-10-23 下午6.12.39
我们需要对商品池进行筛选. 由于我们对商品的关键属性建立的索引, 首先可以根据销量和维权数筛选出优质高效(A类), 优质精品(B类), 劣质(C类)商品; 再在A类商品的基础上根据其他属性(品类, 客单价, 受众人群)等筛选出本次的目标商品集.

在这个过程中我们可以感受到, 搜索分析系统给我们的数据分析者一个很大的迭代筛选的平台, 可以通过不断的尝试和反馈, 提高自己的选品的质量.

固定报表系统

固定报表 一般是针对特征的数据需求. 这是最常见的BI需求. 比如我们的GMV报表, 店铺报表. 在固定报表的基础上的地动仪系统可以很好的支持我们的数据异常点. 比如如果每周一的订单数据都在100w单左右(举例), 如果突然一个周一变成200w单, 就可以发出报警.

我们来对比以下常用的BI工具.

工具名称基本技术适用人群速度灵活性适用场景
即席查询hive1. 数据分析人员
2. 有能力的运营人员
慢:10m~1h所有数据分析场景
OLAP系统olap产品经理, 运营人员较快: 10s~10min特定主体的多维分析
搜索引擎倒排索引1. 目的性强快: 10s以下根据条件的主题检索
报表系统mysql报表相关人员快: 10s以下特定业务数据的查阅

数据仓库在信息检索中的应用

数据仓库不仅在用于BI, 数据仓库实际上充当着企业数据总线的作用. hadoop为存储介质的数据仓库简化了信息检索的成本. 包括数据的获取, 计算和加载.

信息检索系统应该和业务数据解耦. 我们回归一下传统的信息检索系统的构建过程. 传统的搜索工具一般都是基于倒排索引的, 或者kv的的系统, 一般都是单机模式 + 代理的分布式方案.

  1. 传统的搜索引擎, kv引擎等数据与业务数据高度耦合. 业务数据一般存储在DB中, 我们经历过搜索引擎数据丢失的情况, 我们不得小心翼翼的与业务方配合追查, 一不小心一个sql就把业务服务器整垮了.

  2. 数据无法保证完全性. 搜索引擎是一个庞大的系统, 数据经过很多环节才进入索引, 一般都是批处理或者实时构建. 补一个步骤都需要保证数据正确性. 否则索引数据就不准. 由于索引数据的非常宝贵. 搜索团队还要花费很多功力研究如何备份索引, 以防止以外丢失.

  3. 搜索数据与业务数据不一致. 对数据是任何两个部分在处理同一份数据时候都会经历的问题.

我们还是以订单相关的业务为例. 通过"订单", "维权", "购物车", "状态变更"等基本事务过程产生相关的DB和日志数据; 我在在这些基本的数据上搭建"订单检索", "订单导出", "数据报表"等信息检索的业务. 和左侧的业务不同, 这些业务不需要交互和事务, 是一个"一写多读"的功能模块.

屏幕快照 2016-10-23 下午6.25.22

由于日志和DB是基于技术通用性设计的, 没有考虑各个业务的需求. 各个业务势必会有各自不同的业务处理代码. 比如订单检索和数据报表在理论上应该是可以进行精确的"对数"的. 但是由于各自的业务代码是独立的, 因此在数据一致性方面会遇到问题.

搜索引擎的搭建是一个庞大的工程, 首先我们要通过消息队列订阅所有的数据, 然后我们在业务处理层将数据进行整合, 然后建立索引. 这里我们会遇到横向扩展的问题. 我们不得不根据一个合适的主键讲消息队列的数据分流, 分别建立索引.

我们发现全量索引是昂贵的. 全量索引意味着导表, 我们不得不提供专门为搜索引擎使用的备库, 如果数据库本身是分片的, 那么每片我们都要导入.

如果我们引入大数据平台, 就可以完全把搜索引擎和DB解耦.

  1. 数据平台是基础数据的完全镜像.

  2. 数据平台非常的皮实. 不仅可以随时拉去海量数据不影响业务, 而且可以通过批量计算和迭代计算进行复杂的数据处理.

  3. 大数据有逐渐成熟的解决方案体系. 包括批处理, nosql, 和搜索引擎(solr和elasticsearch).

我们看一下以数据仓库为中心的架构.

屏幕快照 2016-10-23 下午6.26.10

  1. 数据仓库充当业务数据层. 数据仓库封装了重要的数据口径. 让业务处理更加关注上层的业务,不需要关注通用的数据处理和封装.

  2. 大数据平台让各种数据引擎执行过程简单可靠. 大数据以透明拓展性和高度可计算性著称, 但是传统的搜索引擎, 本质上是单机程序, 他们的分布式解决方案需要代理层. 如何让他们享受大数据的优势, 很多人给出解决方案. 我们这里给出基于hadoop-elasticsearch的方案, 主要不是介绍相应的技术细节而是强调我们的思路.

  3. 搜索算法可以有更多发挥空间. 基于数据仓库的算法平台, 充分spark等迭代计算的优势, 可以提供搜索引擎很多算法组件, 比如商品的质量度, 商品的类目, 反作弊数据等.

小结

我们介绍了大数据平台下的数据仓库. 数据仓库在设计上尽可能简单, 配合BI和信息检索的应用迭代优化. 为了保证数据仓库的可用性, 我们引入数据字典, 数据地图等工具. 在数据仓库上面, 我们搭建了几种BI工具, 即席查询, olap, 数据报表和搜索引擎, 根据不同的需求方和场景给出不同的解决方案. 最后我们介绍了数据仓库在信息检索领域的应用, 我们看到利用大数据平台的分布式能力, 强大的业务整合能力, 给我们的信息检索带来很大的业务和技术上的便利.

数据是一个企业最重要的资产之一, 如何利用数据价值变得越来越重要. 一个优秀的大数据平台的建设是一个重要的前提. 大数据平台越来越像一个企业的数据总线: 是所有数据的入口, 同时也是所有数据的出口. 像很多企业正在努力的一样, 我们希望能够构建一个灵活可靠的数据仓库. 它像一个企业的基础设施一样, 我们可以利用它提供的数据上, 工具上的服务来搭建我们需要的数据平台, 满足业务需求.

关于作者

洪斌, 有赞大数据团队负责人, 专注大数据和数据挖掘相关技术. 欢迎交流. 

759343-20170105171100597-1801847017.png


来自为知笔记(Wiz)


转载于:https://www.cnblogs.com/hsydj/p/6253156.html

这篇关于有赞大数据实践: 敏捷型数据仓库的构建及其应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/397321

相关文章

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

不删数据还能合并磁盘? 让电脑C盘D盘合并并保留数据的技巧

《不删数据还能合并磁盘?让电脑C盘D盘合并并保留数据的技巧》在Windows操作系统中,合并C盘和D盘是一个相对复杂的任务,尤其是当你不希望删除其中的数据时,幸运的是,有几种方法可以实现这一目标且在... 在电脑生产时,制造商常为C盘分配较小的磁盘空间,以确保软件在运行过程中不会出现磁盘空间不足的问题。但在