数据仓库介绍与实时数仓案例

1.数据仓库简介

数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。

数据仓库是伴随着企业信息化发展起来的,在企业信息化的过程中,随着信息化工具的升级和新工具的应用,数据量变的越来越大,数据格式越来越多,决策要求越来越苛刻,数据仓库技术也在不停的发展。

数据仓库的趋势:

  • 实时数据仓库以满足实时化&自动化决策需求;
  • 大数据&数据湖以支持大量&复杂数据类型(文本、图像、视频、音频);

2.数据仓库的发展

数据仓库有两个环节:数据仓库的构建与数据仓库的应用。

早期数据仓库构建主要指的是把企业的业务数据库如ERP、CRM、SCM等数据按照决策分析的要求建模并汇总到数据仓库引擎中,其应用以报表为主,目的是支持管理层和业务人员决策(中长期策略型决策)。

随着业务和环境的发展,这两方面都在发生着剧烈变化。

  • 随着IT技术走向互联网、移动化,数据源变得越来越丰富,在原来业务数据库的基础上出现了非结构化数据,比如网站log,IoT设备数据,APP埋点数据等,这些数据量比以往结构化的数据大了几个量级,对ETL过程、存储都提出了更高的要求;
  • 互联网的在线特性也将业务需求推向了实时化,随时根据当前客户行为而调整策略变得越来越常见,比如大促过程中库存管理,运营管理等(即既有中远期策略型,也有短期操作型);同时公司业务互联网化之后导致同时服务的客户剧增,有些情况人工难以完全处理,这就需要机器自动决策。比如欺诈检测和用户审核。

总结来看,对数据仓库的需求可以抽象成两方面:实时产生结果、处理和保存大量异构数据

注:这里不讨论数据湖技术。

3.数据仓库建设方法论

1)面向主题

从公司业务出发,是分析的宏观领域,比如供应商主题、商品主题、客户主题和仓库主题

2)为多维数据分析服务

数据报表;数据立方体,上卷、下钻、切片、旋转等分析功能。

3)反范式数据模型

以事实表和维度表组成的星型数据模型

注:图片来自51CTO

4.数据仓库架构的演变

数据仓库概念是Inmon于1990年提出并给出了完整的建设方法。随着互联网时代来临,数据量暴增,开始使用大数据工具来替代经典数仓中的传统工具。此时仅仅是工具的取代,架构上并没有根本的区别,可以把这个架构叫做离线大数据架构

后来随着业务实时性要求的不断提高,人们开始在离线大数据架构基础上加了一个加速层,使用流处理技术直接完成那些实时性要求较高的指标计算,这便是Lambda架构

再后来,实时的业务越来越多,事件化的数据源也越来越多,实时处理从次要部分变成了主要部分,架构也做了相应调整,出现了以实时事件处理为核心的Kappa架构

4.1离线大数据架构

数据源通过离线的方式导入到离线数仓中。

下游应用根据业务需求选择直接读取DM或加一层数据服务,比如mysql 或 redis。

数据仓库从模型层面分为三层:

  • ODS,操作数据层,保存原始数据;
  • DWD,数据仓库明细层,根据主题定义好事实与维度表,保存最细粒度的事实数据;
  • DM,数据集市/轻度汇总层,在DWD层的基础之上根据不同的业务需求做轻度汇总;

典型的数仓存储是HDFS/Hive,ETL可以是MapReduce脚本或HiveSQL。

4.2 Lambda架构

随着大数据应用的发展,人们逐渐对系统的实时性提出了要求,为了计算一些实时指标,就在原来离线数仓的基础上增加了一个实时计算的链路,并对数据源做流式改造(即把数据发送到消息队列),实时计算去订阅消息队列,直接完成指标增量的计算,推送到下游的数据服务中去,由数据服务层完成离线&实时结果的合并。

注:流处理计算的指标批处理依然计算,最终以批处理为准,即每次批处理计算后会覆盖流处理的结果。(这仅仅是流处理引擎不完善做的折中

Lambda架构问题:

  • 1.同样的需求需要开发两套一样的代码
    这是Lambda架构最大的问题,两套代码不仅仅意味着开发困难(同样的需求,一个在批处理引擎上实现,一个在流处理引擎上实现,还要分别构造数据测试保证两者结果一致),后期维护更加困难,比如需求变更后需要分别更改两套代码,独立测试结果,且两个作业需要同步上线。
  • 2.资源占用增多:同样的逻辑计算两次,整体资源占用会增多(多出实时计算这部分)

4.3 Kappa架构

Lambda架构虽然满足了实时的需求,但带来了更多的开发与运维工作,其架构背景是流处理引擎还不完善,流处理的结果只作为临时的、近似的值提供参考。后来随着Flink等流处理引擎的出现,流处理技术很成熟了,这时为了解决两套代码的问题,LickedIn 的Jay Kreps提出了Kappa架构

Kappa架构可以认为是Lambda架构的简化版(只要移除lambda架构中的批处理部分即可)。

在Kappa架构中,需求修改或历史数据重新处理都通过上游重放完成。

Kappa架构最大的问题是流式重新处理历史的吞吐能力会低于批处理,但这个可以通过增加计算资源来弥补。

Kappa架构的重新处理过程

重新处理是人们对Kappa架构最担心的点,但实际上并不复杂:

  • 1.选择一个具有重放功能的、能够保存历史数据并支持多消费者的消息队列,根据需求设置历史数据保存的时长,比如Kafka,可以保存全部历史数据。
  • 2.当某个或某些指标有重新处理的需求时,按照新逻辑写一个新作业,然后从上游消息队列的最开始重新消费,把结果写到一个新的下游表中。
  • 3.当新作业赶上进度后,应用切换数据源,读取2中产生的新结果表。
  • 4.停止老的作业,删除老的结果表。

4.4 Lambda架构与Kappa架构的对比

对比项Lambda架构Kappa架构
实时性实时实时
计算资源批和流同时运行,资源开销大只有流处理,仅针对新需求开发阶段运行两个作业,资源开销小
重新计算时吞吐批式全量处理,吞吐较高流式全量处理,吞吐较批处理低
开发、测试每个需求都需要两套不同代码,开发、测试、上线难度较大只需实现一套代码,开发、测试、上线难度相对较小
运维成本维护两套系统(引擎),运维成本大只需维护一套系统(引擎),运维成本小

在真实的场景中,很多时候并不是完全规范的Lambda架构或Kappa架构,可以是两者的混合,比如大部分实时指标使用Kappa架构完成计算,少量关键指标(比如金额相关)使用Lambda架构用批处理重新计算,增加一次校对过程。(1)

Kappa架构并不是中间结果完全不落地,现在很多大数据系统都需要支持机器学习(离线训练),所以实时中间结果需要落地对应的存储引擎供机器学习使用,另外有时候还需要对明细数据查询,这种场景也需要把实时明细层写出到对应的引擎中。(2)参考后面的案例

另外,随着数据多样性的发展,数据仓库这种提前规定schema的模式显得越来难以支持灵活的探索&分析需求,这时候便出现了一种数据湖技术,即把原始数据全部缓存到某个大数据存储上,后续分析时再根据需求去解析原始数据。简单的说,数据仓库模式是schema on write,数据湖模式是schema on read。(3)

5.实时数仓案例

菜鸟仓配实时数据仓库

本案例参考自菜鸟仓配团队的分享,涉及全局设计、数据模型、数据保障等几个方面。

注:特别感谢缘桥同学的无私分享。

5.1 整体设计

整体设计如右图,基于业务系统的数据,数据模型采用中间层的设计理念,建设仓配实时数仓;计算引擎,选择更易用、性能表现更佳的实时计算作为主要的计算引擎;数据服务,选择天工数据服务中间件,避免直连数据库,且基于天工可以做到主备链路灵活配置秒级切换;数据应用,围绕大促全链路,从活动计划、活动备货、活动直播、活动售后、活动复盘五个维度,建设仓配大促数据体系。

5.2 数据模型

不管是从计算成本,还是从易用性,还是从复用性,还是从一致性……,我们都必须避免烟囱式的开发模式,而是以中间层的方式建设仓配实时数仓。与离线中间层基本一致,我们将实时中间层分为两层。

第一层DWD公共实时明细层

实时计算订阅业务数据消息队列,然后通过数据清洗、多数据源join、流式数据与离线维度信息等的组合,将一些相同粒度的业务系统、维表中的维度属性全部关联到一起,增加数据易用性和复用性,得到最终的实时明细数据。这部分数据有两个分支,一部分直接落地到ADS,供实时明细查询使用,一部分再发送到消息队列中,供下层计算使用;

第二层DWS公共实时汇总层

以数据域+业务域的理念建设公共汇总层,与离线数仓不同的是,这里汇总层分为轻度汇总层和高度汇总层,并同时产出,轻度汇总层写入ADS,用于前端产品复杂的olap查询场景,满足自助分析和产出报表的需求;高度汇总层写入Hbase,用于前端比较简单的kv查询场景,提升查询性能,比如实时大屏等;

注:

1.ADS是一款提供OLAP分析服务的引擎。开源提供类似功能的有,Elastic Search、Kylin、Druid等;
2.案例中选择把数据写入到Hbase供KV查询,也可根据情况选择其他引擎,比如数据量不多,查询压力也不大的话,可以用mysql
3.因主题建模与业务关系较大,这里不做描述

5.3 数据保障

集团每年都有双十一等大促,大促期间流量与数据量都会暴增。

实时系统要保证实时性,相对离线系统对数据量要更敏感,对稳定性要求更高。

所以为了应对这种场景,还需要在这种场景下做两种准备:

  • 大促前的系统压测;
  • 大促中的主备链路保障;

6. 实时数仓与离线数仓的对比

在看过前面的叙述与菜鸟案例之后,我们看一下实时数仓与离线数仓在几方面的对比:

首先,从架构上,实时数仓与离线数仓有比较明显的区别,实时数仓以Kappa架构为主,而离线数仓以传统大数据架构为主。Lambda架构可以认为是两者的中间态。

其次,从建设方法上,实时数仓和离线数仓基本还是沿用传统的数仓主题建模理论,产出事实宽表。另外实时数仓中实时流数据的join有隐藏时间语义,在建设中需注意。

最后,从数据保障看,实时数仓因为要保证实时性,所以对数据量的变化较为敏感。在大促等场景下需要提前做好压测和主备保障工作,这是与离线数据的一个较为明显的区别。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优酷背后的大数据秘密

在本文中优酷数据中台的数据技术专家门德亮分享了优酷从Hadoop迁移到阿里云MaxCompute后对业务及平台的价值。 本文内容根据演讲视频以及PPT整理而成。 大家好,我是门德亮,现在在优酷数据中台做数据相关的事情。很荣幸,我正好见证了优酷从没…

从提取层、处理层、基础结构入手,带你了解Spark和Kafka!

作者 | Jaskaran S. Puri译者 | 火火酱 责编 | 徐威龙封图| CSDN 下载于视觉中国电子商务市场中典型的一天是这样的:每分钟发生1万个事件流,并且要选择合适的工具对其进行处理。本文将帮助你重新创建一个场景,其中有大量的数据流入&#xff0…

Java-switch选择结构

基本类型 public class SwitchDemo01 {public static void main(String[] args) {// case 穿透char grade B;switch (grade) {case A:System.out.println("优秀");break;case B:System.out.println("良好");break;case C:System.out.println("及格&…

高性能服务器架构思路【不仅是思路】

在服务器端程序开发领域,性能问题一直是备受关注的重点。业界有大量的框架、组件、类库都是以性能为卖点而广为人知。然而,服务器端程序在性能问题上应该有何种基本思路,这个却很少被这些项目的文档提及。本文正式希望介绍服务器端解决性能问…

v-if v-show区别(面试题)

v-if、v-show顾名思义就是用来判断视图层展示效果的,在Vue中文社区说明文档的介绍有: 相同点: v-if与v-show都可以动态控制dom元素显示隐藏 不同点: 1.v-if :可以根据表达式的值在DOM中生成或移除一个元素。 v-show:可…

专访世界顶级游戏背后的男人

‍作者 | 华为云和TA的朋友们封图| CSDN 下载于视觉中国如今,对于网易不鸣工作室CEO王希来说,团队的代表作《战意》已经获得阶段性成功。但不为人知的是,从下定决心要做世界顶级游戏,到这款作品萌生想法,再到正式公测&…

Java-While循环

public class WhileDemo01 {public static void main(String[] args) {// 输出 1 ~ 100int i 0;while (i<100) {i;System.out.println(i);}// 计算 1234...100&#xff1f;int j 0;int sum 0;while (j<100){sum sum j;j;}System.out.println(sum); // 5050} }https…

如何将深度学习训练速度提升一百倍?PAISoar 来了

阿里妹导读&#xff1a;得力于数据规模增长、神经网络结构的演进和计算能力的增强&#xff0c;深度学习的图像处理、语音识别等领域取得了飞速发展。随着训练数据规模和模型复杂度的不断增大&#xff0c;如何充分利用分布式集群的计算资源加快训练速度&#xff0c;提升业务支持…

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause 的问题 MySQL

show variables like "sql_mode"; set sql_mode; set sql_modeNO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES;

破解面试难题8个角度带你解读SQL面试技巧!

作者 | Xinran Waibel译者 | 天道酬勤 责编 | 徐威龙封图| CSDN 下载于视觉中国SQL是用于数据分析和数据处理的最重要的编程语言之一&#xff0c;因此SQL问题始终是与数据科学相关工作&#xff08;例如数据分析师、数据科学家和数据工程师&#xff09;面试过程中的一部分。 SQ…

一文读懂架构整洁之道(附知识脉络图)

程序的世界飞速发展&#xff0c;今天所掌握的技能可能明年就过时了&#xff0c;但有一些东西是历久弥新&#xff0c;永远不变的&#xff0c;掌握了这些&#xff0c;在程序的海洋里就不会迷路&#xff0c;架构思想就是这样一种东西。 本文是《架构整洁之道》的读书笔记&#xf…

python获取视频时长方法

1.使用subprocess和re import re import subprocess video r"work/train/video/a8b96f016a28d8f3836f7cbb7734ecde.mp4" import subprocessdef get_length(filename):result subprocess.run(["ffprobe", "-v", "error", "-sho…

阿里敏捷教练全面解析淘宝直播敏捷实践之路

背景介绍 阿里很少提敏捷转型或DevOps&#xff0c;阿里是强业务驱动的&#xff0c;不管用什么办法&#xff0c;一定要达到业务目标。 我来自敏捷教练团队&#xff0c;我们的职责是帮助团队拿结果。这里的团队不限于研发团队&#xff0c;我现在支持的团队包括销售团队和产品运…

int默认值为0,Integer默认值为null

前提概要 Java为每个原始类型提供了封装类&#xff0c;Integer是java为int提供的封装类。 int的默认值为0&#xff0c;而Integer的默认值为null&#xff0c;即Integer可以区分出未赋值和值为0的区别&#xff0c;int则无法表达出未赋值的情况。 代码示例 public class…

GitHub 接连封杀开源项目惹众怒,CEO 亲自道歉!

作者 | 唐小引头图 | CSDN 下载自东方 IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;王坚博士曾经做过这样一个非常形象的比喻&#xff0c;他将做 App 比作是在别人的花园里弄盆栽&#xff0c;「种点花草是没有问题的」&#xff0c;不过「别人叫你的产品下架你…

一键托管,阿里云全链路追踪服务正式商用:成本仅自建1/5或更少

随着互联网架构的扩张&#xff0c;分布式系统变得日趋复杂&#xff0c;越来越多的组件开始走向分布式化&#xff0c;如微服务、消息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用&#xff0c;这些组件共同构成了繁杂的分布式网络。 在一次800多人的开发者调研中&…

基于Docker的Mysql主从复制搭建_mysql5.7.x

文章目录为什么基于Docker搭建&#xff1f;一、拉取镜像创建容器1. 拉取mysql:5.7镜像2. 创建master容器3. 创建slave容器4. 查看正在运行的容器5. 此时可以使用Navicat等工具测试连接mysql二、搭建Master(主)服务器2.1. 进入到Master容器内部2.2. my.cnf编辑2.2. 重启mysql服务…

医疗保健、零售、金融、制造业……一文带你看懂大数据对工业领域的影响!...

作者 | Zubair Hassan译者 | 风车云马 责编 | 徐威龙封图| CSDN 下载于视觉中国随着大数据技术的兴起&#xff0c;工业领域在很大程度上发生了变化。智能手机和其他通讯方式的使用迅速增加&#xff0c;使得每天都能收集大量数据。以下是大数据对工业领域的影响。如今&#xff0…

mysql主从复制排错

使用start slave开启主从复制过程后&#xff0c;如果SlaveIORunning一直是Connecting&#xff0c;则说明主从复制一直处于连接状态&#xff0c;这种情况一般是下面几种原因造成的&#xff0c;我们可以根据 Last_IO_Error提示予以排除。 可能的原因说明网络不通查看master和sla…

揭秘!一个高准确率的Flutter埋点框架如何设计

背景 用户行为埋点是用来记录用户在操作时的一系列行为&#xff0c;也是业务做判断的核心数据依据&#xff0c;如果缺失或者不准确将会给业务带来不可恢复的损失。闲鱼将业务代码从Native迁移到Flutter上过程中&#xff0c;发现原先Native体系上的埋点方案无法应用在Flutter体…