网站建设开发招标书,廊坊建站软件,厦门网站的关键词自动排名,2022最新时事新闻及点评数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务#xff0c;数据仓库的建设也是“数据智能”中必不可少的一环。本文将从数据仓库的简介、经历了怎样的发展、如何建设、架构演变、应用案例以及实时数仓与离线数仓的对比六个方面全面分享关于数仓的详细内容。
…数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务数据仓库的建设也是“数据智能”中必不可少的一环。本文将从数据仓库的简介、经历了怎样的发展、如何建设、架构演变、应用案例以及实时数仓与离线数仓的对比六个方面全面分享关于数仓的详细内容。
1.数据仓库简介
数据仓库是一个面向主题的Subject Oriented、集成的Integrate、相对稳定的Non-Volatile、反映历史变化Time Variant的数据集合用于支持管理决策。
数据仓库是伴随着企业信息化发展起来的在企业信息化的过程中随着信息化工具的升级和新工具的应用数据量变的越来越大数据格式越来越多决策要求越来越苛刻数据仓库技术也在不停的发展。 数据仓库的趋势
实时数据仓库以满足实时化自动化决策需求大数据数据湖以支持大量复杂数据类型文本、图像、视频、音频2.数据仓库的发展
数据仓库有两个环节数据仓库的构建与数据仓库的应用。
早期数据仓库构建主要指的是把企业的业务数据库如 ERP、CRM、SCM 等数据按照决策分析的要求建模并汇总到数据仓库引擎中其应用以报表为主目的是支持管理层和业务人员决策中长期策略型决策。
随着业务和环境的发展这两方面都在发生着剧烈变化。
随着IT技术走向互联网、移动化数据源变得越来越丰富在原来业务数据库的基础上出现了非结构化数据比如网站 logIoT 设备数据APP 埋点数据等这些数据量比以往结构化的数据大了几个量级对 ETL 过程、存储都提出了更高的要求互联网的在线特性也将业务需求推向了实时化随时根据当前客户行为而调整策略变得越来越常见比如大促过程中库存管理运营管理等即既有中远期策略型也有短期操作型同时公司业务互联网化之后导致同时服务的客户剧增有些情况人工难以完全处理这就需要机器自动决策。比如欺诈检测和用户审核。总结来看对数据仓库的需求可以抽象成两方面实时产生结果、处理和保存大量异构数据。 注这里不讨论数据湖技术。 3.数据仓库建设方法论
3.1 面向主题
从公司业务出发是分析的宏观领域比如供应商主题、商品主题、客户主题和仓库主题
3.2 为多维数据分析服务
数据报表数据立方体上卷、下钻、切片、旋转等分析功能。
3.3 反范式数据模型
以事实表和维度表组成的星型数据模型 4.数据仓库架构的演变
数据仓库概念是 Inmon 于 1990 年提出并给出了完整的建设方法。随着互联网时代来临数据量暴增开始使用大数据工具来替代经典数仓中的传统工具。此时仅仅是工具的取代架构上并没有根本的区别可以把这个架构叫做离线大数据架构。
后来随着业务实时性要求的不断提高人们开始在离线大数据架构基础上加了一个加速层使用流处理技术直接完成那些实时性要求较高的指标计算这便是 Lambda 架构。
再后来实时的业务越来越多事件化的数据源也越来越多实时处理从次要部分变成了主要部分架构也做了相应调整出现了以实时事件处理为核心的 Kappa 架构。 4.1 离线大数据架构
数据源通过离线的方式导入到离线数仓中。下游应用根据业务需求选择直接读取 DM 或加一层数据服务比如 MySQL 或 Redis。数据仓库从模型层面分为三层
ODS操作数据层保存原始数据DWD数据仓库明细层根据主题定义好事实与维度表保存最细粒度的事实数据DM数据集市/轻度汇总层在 DWD 层的基础之上根据不同的业务需求做轻度汇总
典型的数仓存储是 HDFS/HiveETL 可以是 MapReduce 脚本或 HiveSQL。 4.2 Lambda 架构
随着大数据应用的发展人们逐渐对系统的实时性提出了要求为了计算一些实时指标就在原来离线数仓的基础上增加了一个实时计算的链路并对数据源做流式改造即把数据发送到消息队列实时计算去订阅消息队列直接完成指标增量的计算推送到下游的数据服务中去由数据服务层完成离线实时结果的合并。 注流处理计算的指标批处理依然计算最终以批处理为准即每次批处理计算后会覆盖流处理的结果。这仅仅是流处理引擎不完善做的折中 Lambda 架构问题
同样的需求需要开发两套一样的代码这是 Lambda 架构最大的问题两套代码不仅仅意味着开发困难同样的需求一个在批处理引擎上实现一个在流处理引擎上实现还要分别构造数据测试保证两者结果一致后期维护更加困难比如需求变更后需要分别更改两套代码独立测试结果且两个作业需要同步上线。资源占用增多同样的逻辑计算两次整体资源占用会增多多出实时计算这部分4.3 Kappa 架构
Lambda 架构虽然满足了实时的需求但带来了更多的开发与运维工作其架构背景是流处理引擎还不完善流处理的结果只作为临时的、近似的值提供参考。后来随着 Flink 等流处理引擎的出现流处理技术很成熟了这时为了解决两套代码的问题LickedIn 的 Jay Kreps 提出了 Kappa 架构。
Kappa 架构可以认为是 Lambda 架构的简化版只要移除 lambda 架构中的批处理部分即可。在 Kappa 架构中需求修改或历史数据重新处理都通过上游重放完成。Kappa 架构最大的问题是流式重新处理历史的吞吐能力会低于批处理但这个可以通过增加计算资源来弥补。Kappa 架构的重新处理过程
重新处理是人们对 Kappa 架构最担心的点但实际上并不复杂
选择一个具有重放功能的、能够保存历史数据并支持多消费者的消息队列根据需求设置历史数据保存的时长比如 Kafka可以保存全部历史数据。当某个或某些指标有重新处理的需求时按照新逻辑写一个新作业然后从上游消息队列的最开始重新消费把结果写到一个新的下游表中。当新作业赶上进度后应用切换数据源读取 2 中产生的新结果表。停止老的作业删除老的结果表。4.4 Lambda 架构与 Kappa 架构的对比 在真实的场景中很多时候并不是完全规范的 Lambda 架构或 Kappa 架构可以是两者的混合比如大部分实时指标使用 Kappa 架构完成计算少量关键指标比如金额相关使用 Lambda 架构用批处理重新计算增加一次校对过程。Kappa 架构并不是中间结果完全不落地现在很多大数据系统都需要支持机器学习离线训练所以实时中间结果需要落地对应的存储引擎供机器学习使用另外有时候还需要对明细数据查询这种场景也需要把实时明细层写出到对应的引擎中。参考后面的案例。另外随着数据多样性的发展数据仓库这种提前规定 schema 的模式显得越来难以支持灵活的探索分析需求这时候便出现了一种数据湖技术即把原始数据全部缓存到某个大数据存储上后续分析时再根据需求去解析原始数据。简单的说数据仓库模式是 schema on write数据湖模式是 schema on read。5.实时数仓案例
菜鸟仓配实时数据仓库本案例参考自菜鸟仓配团队的分享涉及全局设计、数据模型、数据保障等几个方面。 注特别感谢缘桥同学的无私分享。 5.1 整体设计
整体设计如下图基于业务系统的数据数据模型采用中间层的设计理念建设仓配实时数仓计算引擎选择更易用、性能表现更佳的实时计算作为主要的计算引擎数据服务选择天工数据服务中间件避免直连数据库且基于天工可以做到主备链路灵活配置秒级切换数据应用围绕大促全链路从活动计划、活动备货、活动直播、活动售后、活动复盘五个维度建设仓配大促数据体系。 5.2 数据模型
不管是从计算成本还是从易用性还是从复用性还是从一致性等等我们都必须避免烟囱式的开发模式而是以中间层的方式建设仓配实时数仓。与离线中间层基本一致我们将实时中间层分为两层。 第一层 DWD 公共实时明细层
实时计算订阅业务数据消息队列然后通过数据清洗、多数据源 join、流式数据与离线维度信息等的组合将一些相同粒度的业务系统、维表中的维度属性全部关联到一起增加数据易用性和复用性得到最终的实时明细数据。这部分数据有两个分支一部分直接落地到 ADS供实时明细查询使用一部分再发送到消息队列中供下层计算使用
第二层 DWS 公共实时汇总层
以数据域业务域的理念建设公共汇总层与离线数仓不同的是这里汇总层分为轻度汇总层和高度汇总层并同时产出轻度汇总层写入 ADS用于前端产品复杂的 olap 查询场景满足自助分析和产出报表的需求高度汇总层写入 Hbase用于前端比较简单的 kv 查询场景提升查询性能比如实时大屏等
注
ADS 是一款提供 OLAP 分析服务的引擎。开源提供类似功能的有Elastic Search、Kylin、Druid 等案例中选择把数据写入到 Hbase 供 KV 查询也可根据情况选择其他引擎比如数据量不多查询压力也不大的话可以用 MySQL因主题建模与业务关系较大这里不做描述
5.3 数据保障
阿里巴巴每年都有双十一等大促大促期间流量与数据量都会暴增。实时系统要保证实时性相对离线系统对数据量要更敏感对稳定性要求更高。所以为了应对这种场景还需要在这种场景下做两种准备
大促前的系统压测大促中的主备链路保障
菜鸟双11「仓储配送数据实时化」详情了解~ 6. 实时数仓与离线数仓的对比
在看过前面的叙述与菜鸟案例之后我们看一下实时数仓与离线数仓在几方面的对比
首先从架构上实时数仓与离线数仓有比较明显的区别实时数仓以 Kappa 架构为主而离线数仓以传统大数据架构为主。Lambda 架构可以认为是两者的中间态。其次从建设方法上实时数仓和离线数仓基本还是沿用传统的数仓主题建模理论产出事实宽表。另外实时数仓中实时流数据的 join 有隐藏时间语义在建设中需注意。最后从数据保障看实时数仓因为要保证实时性所以对数据量的变化较为敏感。在大促等场景下需要提前做好压测和主备保障工作这是与离线数据的一个较为明显的区别。
原文链接 本文为云栖社区原创内容未经允许不得转载。