大数据整体架构概述

大数据5V特征

  1. volume。数据体量大。
    1. 采集数据量大。
    2. 存储数据量大。
    3. 计算数据量大。
    4. TB、PB级别起步。
  2. variety。种类、来源多样化。
    1. 种类:结构化、半结构化、非结构化。
    2. 来源:日志文本、图片、音频、视频。
  3. value。低价值密度。
    1. 信息海量但是价值密度低。
    2. 深度复杂的挖掘分析需要机器学习参与。
  4. velocity。速度快。
    1. 数据增长速度快。
    2. 获取数据速度快。
    3. 数据处理速度块。
  5. veracity。数据的质量。
    1. 数据的准确性。
    2. 数据的可信赖度。

企业数据分析方向

把隐藏在数据背后的信息集中和提炼出来,总结出所研究对象的内在规律,帮助管理者进行有效的判断和决策。

数据分析在企业日常经营分析中主要有三大方向:

  1. 现状分析:
    1. 分析当下的数据。现阶段的整体情况,各个部分的构成占比、发展、变动。
    2. 实时分析。面向当下,分析实时产生的数据。所谓的实时是指从数据产生到数据分析到数据应用的时间间隔很短,可细分秒级、毫秒级。
  2. 原因分析
    1. 分析过去的数据。某一现状为什么发生,确定原因,做出调整优化。
    2. 离线分析。面向过去,面向历史,分析已有数据。在实践维度明显成批次性变化。一周一分析(T+7),一天一分析(T+1),所以也叫做批处理。
  3. 预测分析
    1. 结合数据预测未来。结合已有数据预测未来发展趋势。
    2. 机器学习。基于历史数据和当下产生的实时数据预测未来发生的事情。侧重于数学算法的运用,如分类、聚类、关联、预测。

数仓的主要特征

img

面向主题性

img

集成性

img

非易失性

img

时变性

img

大数据的特点

  1. 分布式存储。
  2. 分布式资源调度。
  3. 分布式计算。

分布式和集群的概念

分布式:多台机器。每台机器上部署不同组件。

集群:多台机器。每台机器上部署相同组件。

数据分析模型

星型模型

img

雪花模型

img

星座模型

就是星星模型的组合体

img

数据仓库分层

img

img

数据库与数据仓库区别

功能数据库数据仓库
数据范围当前状态数据存储历史、完整、反应历史变化数据
数据变化支持频繁的增删改查操作可增加、查询,无更新、删除操作
应用场景面向业务交易流程面向分析、支持侧重决策分析
处理数据量频繁、小批次、高并发、低延迟非频繁、大批量、高吞吐、有延迟
设计理论遵循数据库三范式、避免冗余违范式、适当冗余
建模方式ER实体关系建模(范式建模)范式建模+维度建模

img

OLTP、OLAP对比

 OLTPOLAP
数据源仅包含当前运行日常业务数据整合来自多个来源的数据,包括OLTP和外部来源
目的面向应用、面向业务、支撑事务面向主题、面向分析、支撑分析决策
焦点当下主要面向过去、面向历史,实时数仓除外
任务读写操作大量读而很少写操作
响应时间毫秒秒、分钟、小时或者天取决于数据量和查询复杂性
数据量小数据,MB/GB大数据,TP/PB
主要应用数据库数据仓库

OLAP引擎分类

OLAP按存储器的数据存储格式分为MOLAP(Multi-dimensional OLAP)、ROLAP(Relational OLAP)和HOLAP(Hybrid OLAP)。

  1. MOLAP。基于多维数组的存储模型,也是OLAP最初的形态,特点是对数据进行预计算,以空间换效率,明细和聚合数据都保存在cube中。但生成cube需要大量时间和空间。MOLAP可选Kylin、Druid等开源产品。
  2. ROLAP。完全基于关系模型进行存储数据,不需要预计算,按需即时查询。明细和汇总数据都保存在关系型数据库事实表中。
  3. HOLAP。混合模型,细节数据以ROLAP存放,聚合数据以MOLAP存放。这种方式相对灵活,且更加高效。
开源OLAP引擎优点缺点技术融合成本易用性使用场景运维成本引擎类型
ClickHouse1.列式存储<br />2.单机性能彪悍<br />3.保留明细数据<br />4.向量化引擎1.分布式集群在线扩展支持不佳<br />2.运维成本极高非标协议接口全面纯列存OLAP
Druid1.实时数据摄入<br />2.列式存储和位图索引<br />3.多租户和高并发1.OLAP性能分场景表现差异大<br />2.使用门槛高3.仅支持聚合查询非标协议接口局限MOLAP
TiDB1.HTAP混合数据库<br />2.同时支持明细和聚合查询<br />3.高度兼容MySQL1.非列存储<br />2.OLAP能力不足SQL标准全面纯列存OLAP
Kylin1.预计算引擎,可以对数据一次聚合多次查询<br />2.支持数据规模超大<br />3.易用性强,支持标准sql<br />4.性能强,查询数据快(预聚合结果)1.需要依赖Hadoop生态<br />2.仅支持聚合查询<br />3.不支持ad-hoc查询<br />4.不支持join以及对数据的更新SQL标准局限MOLAP
Doris1.GoogleMesa+ApacheImpa+ORCFlle/Parquet<br />2.主键更新<br />3.支持RollupTable<br />4.高并发和高吞吐的Ad-hoc查询<br />5.支持聚合+明细数据查询<br />6.无外部系统依赖成熟度不足兼容MySQL访问协议全面ROLAP

大数据架构演变

传统离线大数据架构

img

Lambda架构

img

img

Lambda架构缺点:

  1. 同样需求需要开发两套一样的代码。
  2. 集群资源使用增多。
  3. 离线结果和实时结果不一致。
  4. 批量计算T+1可能计算不完。
  5. 服务器存储大。

Kappa架构

img

Kappa架构缺点:

  1. Kafka无法支撑海量数据存储。
  2. Kafka无法支持高效的OLAP。
  3. 无法复用数据血缘管理体系。
  4. Kafka不支持update/upsert。

湖仓一体实时数仓架构

img

湖仓一体解决问题:

  1. 存储统一。
  2. Kafka存储量小问题。
  3. 任意分层都可以OLAP数据分析。
  4. 复用同一套相同的血缘关系。
  5. 实时数据更新。

公司架构选择

img

对比项传统离线大数据架构Lambda架构Kappa架构
实时性离线(无法处理实时业务)离线+实时实时(批流一体)
计算资源只有批处理批和流同时运行,资源消耗大只有流处理,资源开销小
重新计算时吞吐量批处理全量处理,吞吐量大批处理全量处理,吞吐量大流式全量处理,吞吐较批处理全量要低一些
开发、测试难度批处理一套代码,开发、测试、上线难度小批处理和流处理相同逻辑两条代码,开发、测试、上线难度大只需实现一套代码,开发、测试、上线难度相对较小
运维成本维护一套引擎,运维成本小维护两套引擎,运维成本大维护一套引擎,运维成本小

这里对3、4情况选择架构存疑,待以后更了解之后补充

网易实时数仓实践

img

顺丰实时数仓实践

img

img

腾讯实时数仓实践

img

img

滴滴实时数仓实践

img

img

数据计算模型

批式模型(Batch)

批式模型就是使用MapReduce、Hive、Spark等典型的批计算引擎,以小时任务或者天任务的形式来做数据计算。

  1. 延迟:小时级延迟或者天级别延迟。这里的延迟不单单指的是定时任务的时间,在数据架构里,这里的延迟时间通常是定时任务间隔时间+一系列以来任务的计算时间+数据平台最终可以展示结果的时间。数据量大、逻辑复杂的情况下,小时任务计算的数据通常真正延迟时间是2~3小时。
  2. 数据完成度:数据较为完整。以处理时间为例,小时级别的任务,通常计算的原始数据已包含了小时内的所有数据,所以得到的数据相对较完整。但如果业务需求是事件事件,这里涉及到终端的一些延迟上报机制,在这里,批式计算任务就很难派上用场。
  3. 成本:成本很低。只有在做任务计算时,才会占用资源,如果不做任务计算,可以将这部分批式计算资源出让给在线业务使用。从另一个角度来说成本是挺高的,如原始数据做了一些增删改查,数据晚到的情况,那么批式任务是要全量重新计算。

img

流式模型(Stream)

流式模型,典型的就是使用Flink来进行实时的数据计算

  1. 延迟:很短,甚至是实时。
  2. 数据完整度:较差。因为流式引擎不会等到所有数据到齐之后再开始计算,所以有一个watermark的概念,当数据的事件小于watermark时,就会被丢弃,这样是无法对数据完整度有一个绝对的保障。在互联网场景中,流式模型主要用于活动时的数据大盘展示,对数据的完整度要求并不算很高。在大部分场景中,用户需要开发两个程序,一是流式数据生产流式结果,二是批式计算任务,用于次日修复实时结果。
  3. 成本:很高。因为流式任务是常驻的,并且对于多流join的场景,通常要借助内存或者数据库来做state的存储,不管是序列化开销,还是和外部组件交互产生的额外IO,在大数据下都是不容忽视的。

img

增量模型(Incremental)

增量模型,简单来讲,是以mini batch的形式来跑准实时任务。Hudi在增量模型追踪支持了两个最重要的特性:

  1. Upsert:这个主要是解决批式模型中,数据不能插入、更新的问题,有了这个特性,可以往Hive中写入增量数据,而不是每次进行完全的覆盖。(Hudi自身维护了key->file的映射,所以当upsert时很容易找到key对应的文件)
  2. Incremental Query:增量查询,减少计算的原始数据量。以Uber中司机和乘客的数据流Join为例,每次抓取两条数据流中的增量数据进行批式的Join即可,相比流式数据而言,成本要降低几个数量级。

img

版权声明:除特殊说明,博客文章均为Mark原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。VIP内容严禁转载! | 广告招租请留言
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇