大数据架构演变

article/2025/9/12 4:12:24

大数据架构演变

    • 一、传统离线大数据架构
    • 二、Lambda架构(离线处理+实时链路)-传统实时开发
    • 三、Lambda架构(离线数仓+实时数仓)
    • 四、Kappa架构
    • 五、架构选择:
    • 六、湖仓一体(流批一体)实时数仓架构
    • 七、从普通项目到Hadoop,再到Spark
      • 1、普通单机方式
      • 2、按照分布式计算(多机器方式):
      • 3、多机器优化

一、传统离线大数据架构

在这里插入图片描述

一般在刚引入大数据架构是开始使用,比较适合做批量处理,T+1数据处理等

优点是做批量计算性能比较高,特别适合做批量数据的聚合分析计算。

缺点:这种架构不好支持实时业务数据的开发。一般这种离线数仓分层计算之间都是通过Mapreduce/SparkSQL做批量处理来实现聚合分析,除了数据落库的磁盘IO等比较慢以外,还有一点就是批处理是需要数据来了以后等待一会,聚集一批数据在处理,这样数据从头到尾下来就需要等待和处理较长的时间。而对于一些对实时性要求高的数据来说,这种滞后性是无法容忍的。

二、Lambda架构(离线处理+实时链路)-传统实时开发

在这里插入图片描述

从原有离线处理架构的基础上加上了实时处理链路部分,实现了实时业务数据的处理。

对于批处理任务,还是使用原有的传统离线架构不变,支持高性能的离线批处理。

对于实时性要求比较高的场景和需求,单独采用实时链路进行开发,数据流过来了能直接处理,而不需要积累一定的时间或量级再进行处理,尽可能的提高数据从流入到结果产出的时间效率。
缺点:实时链路的业务数据处理是烟囱式的开发,不能对实时链路处理的中间结果做复用处理,每一个实时业务需求都需要从头开始做处理。

三、Lambda架构(离线数仓+实时数仓)

在这里插入图片描述

上面的实时链路没有对中间结果进行保存,当有大量的实时需求需要开发时,需要尽可能的对中间结果进行复用,以此来提交效率,因此需要把这些中间结果保存起来,使用kafka作为实时数仓。

(其实我觉得大部分应该都是这样,短链路处理就是实时链路,长链路处理就是实时数仓,对于后端开发人员来说,尤其微服务架构化之后,同一链路的各种数据处理应该都是按功能分配在不同的服务中,而服务与服务之间的数据传递,就需要用到kafka,实际这就已经类似于实时数仓了)
缺点:

  1. 对于离线部分和实时部分的同样业务需要开发两套代码实现
  2. 集群资源使用增多,既要进行实时计算也要进行离线计算
  3. 离线结果和实时结果不一致
  4. 批量计算T+1数据任务量大,可能计算不过来
  5. 同时需要存储两套数据,增加存储成本

四、Kappa架构

在这里插入图片描述

Kappa架构的点就在于,利用大数据组件(spark、flink)的延时数据处理能力,实现批、流的统一。
缺点:

  1. Kafka无法支撑海量数据的存储,一般只能存储一周或者半个月的数据。
  2. Kafka无法支持高效的OLAP,而大多数业务希望能够直接从DW层使用SQL查询数据,但这里只能间接通过Spark、Flink开发个程序再从kafka中拿数据出来进行分析。
  3. 无法复用数据血缘管理体系(比如后面的结果出错了,想要检查它依赖的前面的结果的正确性,却不好通过kafka来观察)
  4. Kafka不支持更新操作(比如部分数据有延时,在后面发过来后需要对数据做重新计算,但是kafka是一个顺序写入的基于日志的消息系统,不支持修改历史数据)

五、架构选择:

1、 刚上大数据系统,或者暂时没有实时场景
传统离线大数据架构

2、 离线业务多,实时业务少
离线数仓+实时处理链路的Lambda架构

3、公司离线业务和实时业务都比较多
离线数仓+实时数仓的Lambda架构

4、实时业务多,离线数据少
Kappa出实时数仓架构

六、湖仓一体(流批一体)实时数仓架构

在这里插入图片描述

湖仓一体解决的问题:

  1. 存储统一,不需要再为实时和离线做两套存储
  2. 解决Kafka作为实时数仓存储容量小的问题
  3. 任意分层都可以用SQL直接做OLAP处理
  4. 复用同一套相同的血缘关系,不会因为实时、离线分开处理导致逻辑不一致
  5. 支持数据更新
    这是一个折中的方案,相对于kafka做实时数仓而言,性能会比较差,但是综合性能与实时性最佳。

七、从普通项目到Hadoop,再到Spark

当一批数据之大,一台机子放不下 之时,采用Hadoop/Spark 这样的并行计算框架,就能够发挥出并行计算的魅力,使得计算能力随着机器的增多而提升。

在这里说的性能提升,并不是一批数据在内存中做处理的性能提升,因为CPU运算本来就很快,那个性能提升相对于磁盘IO而言是可以忽略不计的。在大数据项目中处理数据,主要的瓶颈就来自于磁盘IO的瓶颈,其次就是网络IO的瓶颈。

并且spark可以实现就像写单机程序一样的代码来实现多机器数据处理。

举个例子:
一个1Tb的文件,读取该文件,找出两个相同的行出来。
磁盘IO:100M/S
网络IO:500M/S
可用内存大小:10GB

1、普通单机方式

由于内存不能一次性读取这么多数据,只能按照一定的算法分批次进行处理,如下

在这里插入图片描述

  1. 逐行读取1T文件
  2. 按照哈希取模的方式,将所有行映射到100个文件中,这能确保相同行一定映射到同一个文件中
  3. 依次从100个文件读取数据,在内存中判断是否有两行相等,有则进行输出
    以上三个步骤总计花费500min时间。

2、按照分布式计算(多机器方式):

在这里插入图片描述

  1. 由于需要配合多机分布式计算,这个1TB文件应该放到多个磁盘上,防止单个磁盘成为性能瓶颈,如果数据都分布在一个磁盘上。
  2. 按照多台机器,就可以实现多级并行处理,先将文件加载到内存中,再使用hash取模方式将数据重新划分为100个文件,这些中间结果文件进行落盘,然后再从磁盘加载分好的小文件做内存计算,输出结果。
  3. 按照多台机器,就可以实现多级并行处理,共计300S时间,当然这只是理想情况下的比较,实际上可能分布式计算会有多个节点的各种损耗,而达不到实际时间=总时间/机器数的效果,但是处理效率确实就是随机器增多而增大的。

3、多机器优化

在这里插入图片描述

  1. 由于需要配合多机分布式计算,这个1TB文件应该放到多个磁盘上,防止单个磁盘成为性能瓶颈,如果数据都分布在一个磁盘上。
  2. 按照多台机器,就可以实现多级并行处理,先将文件加载到内存中,再使用hash取模方式将数据重新划分为100个文件,这个过程在多机器的内存和网络中进行数据交换,这中间结果不涉及数据落盘,然后再对每一个分好的小文件做内存计算,输出结果。
  3. 按照多台机器,就可以实现多级并行处理,共计120S时间,相对于上一种方式,是中间结果不落库的方式,减少了数据写入磁盘和重新从磁盘读取的次数,从而加快了速度。

http://chatgpt.dhexx.cn/article/5ZadwB3V.shtml

相关文章

大数据基础架构

一、大数据两大核心技术: 分布式存储:HDFS、HBase、NoSQL、NewSQL 分布式处理:MapReduce 二、大数据计算模式: 三、代表性大数据技术: 1.Hadoop:ETL工具(extract、transform、load&#xff0…

大数据架构简介

大数据技术其实是分布式技术在数据处理领域的创新性应用,其本质和此前讲到的分布式技术思路一脉相承,即用更多的计算机组成一个集群,提供更多的计算资源,从而满足更大的计算压力要求。 大数据技术讨论的是,如何利用更多…

大数据之大数据技术架构

上期我们说到大数据的概念,其实,大数据比我们想象中的还要复杂,本期,我们主要从技术的角度介绍一下大数据的知识。 大数据技术是一系列技术的总称,它是集合了数据采集与传输、数据存储、数据处理与分析、数据挖掘、数据…

常用的几种大数据架构剖析

数据分析工作虽然隐藏在业务系统背后,但是具有非常重要的作用,数据分析的结果对决策、业务发展有着举足轻重的作用。随着大数据技术的发展,数据挖掘、数据探索等专有名词曝光度越来越高,但是在类似于Hadoop系列的大数据分析系统大…

一张图解释清楚大数据技术架构,堪称阿里的核心机密

我们先来看看这张图,这是某公司使用的大数据平台架构图,大部分公司应该都差不多: 从这张大数据的整体架构图上看来,大数据的核心层应该是:数据采集层、数据存储与分析层、数据共享层、数据应用层,可能叫法有…

一文搞懂Matlab的3种取整函数(round、ceil、floor)

1、四舍五入取整:round(x) 对实数和复数(实部和虚部)都是四舍五入取整 2、向上取整:ceil(x) 对实数和复数(实部和虚部)都是向上取整 3、向下取整:floor(x) 对实数和复数(实部和…

MATLAB取整及位数

Matlab取整函数: fix, floor, ceil, round 函数操作Y fix(X)向零取整Y floor(X)向下取整Y ceil(X)向上取整Y round(X)四舍五入取整 Y fix(X)将 X 的每个元素朝零方向四舍五入为最近的整数。对于正方向的 X,fix 的行为与 floor 相同。对于负方向的 X&#xff…

Matlab之取整函数

一、函数取整函数 函数取整,有如下四种函数 floor():向下取整ceil():向上取整round():取最近整数fix():向0取整 二、例程 1、floor():向下取整 disp(floor-向下取整); A1floor(1.2) A2floor(2.5) A3floor(-2.5) 2、ceil():向上取整 disp(ceil-向上取整); B1ce…

matlab中的取整函数(ceil、floor、round)

matlab中的取整函数主要有三种:ceil()、floor()、round() 1.ceil():在英文中,是天花板的意思,有向上的意思,所以,此函数是向上取整,它返回的是大于或等于函数参数,并且与之最接近的整数。 ceil…

Java中的拦截器和过滤器有什么区别

本文收录于JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看 (一)什么是过滤器 过滤器Filter基于Servlet实现,过滤器的主要应用场景是对字符编码、跨域等问题进行过滤。Servlet的工作原理是拦截配置好的…

过滤器和拦截器区别以及执行顺序

过滤器和拦截器区别 觉得这个总结的很好,所以用来借鉴借鉴 摘抄于网络,侵删 过滤器和拦截器执行顺序 在SpringBoot中编写测试代码 自定义过滤器 /*** Author: xiaoshijiu* Date: 2019/5/22* Description: 自定义过滤器*/ public class MyFilter exten…

过滤器和拦截器总结

过滤器和拦截器在日常业务开发中不是经常用到,近来项目中偶尔遇到了,对过滤器和拦截器进行了一次系统学习,现总结如下。 一、过滤器Filter 1.1 什么是过滤器 过滤器是Servlet的高级特性之一,是实现Filter接口的Java类。其基本功能…

Java 过滤器与拦截器的区别

什么是过滤器(Filter) 过滤器,是在java web中将你传入的request、response提前过滤掉一些信息,或者提前设置一些参数。然后再传入Servlet或Struts2的 action进行业务逻辑处理。比如过滤掉非法url(不是login.do的地址请…

Java拦截器和过滤器的区别

过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。   ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。   ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。  …

Java过滤器与拦截器的区别

Java过滤器与拦截器的区别 1. 过滤器与拦截器概述1.1 过滤器 Filter1.2 拦截器 interceptor 2. 过滤器与拦截器区别3. 过滤器与拦截器实现3.1 过滤器(Filter)3.2 拦截器 (Interceptor)3.3 拦截器WebMvc配置3.4 切片(Aspect) 4. 过…

C语言pow函数的调用

1.pow函数的含义&#xff1a;在math.h的头文件中是指a的b次方。 2.对于pow函数的直接应用&#xff1a; #include<stdio.h> #include<math.h> //***math头文件 int main() {double a2,b3;double result;resultpow(2,3); …

mysql pow函数怎么用_pow函数怎么用

PHP pow函数表示指数表达式。 pow函数怎么用&#xff1f; php pow()函数 语法 作用&#xff1a;pow()函数的作用是将一个数进行n次方计算后返回 语法&#xff1a;pow(X,Y); 参数&#xff1a; X表示要做处理的数字 Y表示指定n次方中的n数值 说明&#xff1a;返回X的Y次方幂&…

c语言的pow函数运用

在c语言当中我们要计算一个数的n次方时候&#xff0c;可以使用多种方法&#xff0c;但是也有一种比较简单的方法&#xff0c;便是调用一个函数pow函数。 pow函数在使用时候需要引用头文件#include<math.h>&#xff0c;接下来可以引用一个例子&#xff1a; 如果现在假设我…

C语言中的pow函数

在我们学习C语言时&#xff0c;在一些算法的问题上常常会遇到让我们求一个数的n次方&#xff0c;这时候为了方便我们可以使用C语言函数库给我们的pow函数&#xff0c;*因为这是从C语言函数库调用出来的所以我们在使用前需要引入头文件#include<math.h>。 比如当我们输入…