数据仓库架构(二)湖仓一体化架构

【摘要】

大数据、数据库、数据湖、数据仓库、湖仓一体化到智能湖仓。

【背景】

       最近一直忙云原生的工作,前面的数仓积累都要丢干净了......偶然发现项目中也用了kettle之类的取数,又想起来之前做的大数据和数仓项目,重新梳理一下,免得以后彻底忘了。

【问题】

       大数据和数据库、数据湖、数据仓库、湖仓一体化到智能湖仓,分别是什么

【整体介绍】

       越来越觉得云计算真的很有意思。云原生算是入门吧,主要还是偏应用侧,开发、部署、运维和运营这些,关键是它深入了集群的概念(从传统的物理机/虚拟机集群转向了容器集群),按我的理解它主要是做分布式部署

       系统开发和应用不可能不考虑数据的,所以自然还要关注大数据架构。个人感觉大数据更侧重于取数、存数和算数,其中数据存储和计算也都是利用分布式集群,也需要一个集群调度的引擎,Hadoop架构中Apache Hadoop YARN就是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度。类比的话Yarn可以跟K8S一起看,便于理解,大数据的关键是分布式计算

        HDFS作为大数据的存储系统,有一个短板,那就是只能用来做大文件存储和访问,不适合大量小文件存储,而且在实际使用中,并不是所有的数据都可以用文件存储。HDFS更适合作为大数据计算本身需要的存储,配合HBase提供一个实时读写的分布式数据库系统,目的是提供计算能力。但是数据库存在一个先天不足,那就是数据库面向事务,更擅长做事务性工作,不擅长做分析性工作,于是就产生了数据仓库。

        数据仓库可以理解成一个数据库集群,主要是用来做SQL的分布式执行MPP,而且也有一个调度的“大脑”Coordinator。数据仓库相当于一个集成化数据管理的平台,从多个数据源抽取有价值的数据,在仓库内转换和流动,所以数仓对于数据有一定要求,比如标准化、批量化、相对稳定、反应历史变化等,可以想象现实中仓库里面的箱子,这也是为什么数据需要做ETL甚至数据治理才能进入仓库。

       对于系统采集来的各种数据,其中可能有结构化的、半结构化的、非结构化的,还有历史的、离线的等等,如果企业想把数据都保留下来,方便以后使用,数据库和数据仓都不适合。以往的解决思路是不同的数据存放在不同的存储里面,比如结构化数据放在数据库,文件化数据放在文件存储,碎片化数据放在对象存储等等,这样数据既不能流通,又没有统一的数据标准,还需要花费大量成本做各种各样的存储和维护。数据湖就是在这种需求下产生的,就好像现实中的湖泊,不管哪里来的水都能流入湖中,数据湖就相当于把各种形式和来源的数据当作水源,灌进去囤起来。数据湖也可以构建集群,基于Kubernetes提供集群调度和自动扩缩容能力,但并不是用来做应用的部署和运维,而是实现数据的分布式分析能力。

【大数据的分布式计算】

       大数据分布式计算框架MapReduce,是基于Google发布的分布式计算框架MapReduce论文设计开发,用于大规模数据集(大于1TB)的并行运算。

        MapReduce有几个优点:

1. 易于编程:编程仅需描述需要做什么, 而具体怎么去做就交由系统的执行框架处理。

2. 良好的扩展性:可以通过添加机器以达到扩展集群能力的目的。
3. 高容错性:通过计算迁移或者数据迁移等策略提高集群的可用性与容错性。
        MapRedcue适合做大规模数据集的离线批处理计算,任务分而治之,子任务相对独立;与此同时,MapRedcue不适合实时的交互式计算,要求快速响应,低延迟,比如SQL查询、流式计算、实时分析,比如广告点击计算,子任务之间相互依赖(迭代计算)。
       MapReduce的算法是这样:
       A、对每一个输入的数据 (input) 拆分为多个键值对 (key-value);
       B、 针对每一个键值对分别调用 Map 进行并行处理。
       C、 每个 Map 得到的结果同样是键值对的形式,且每个Map 可能会产生多个新的键值对。
       D、 Map 得到的结果进行排序、组合。
       E、 将上一步结果进行 Reduce 规约计算。
       F、 以键值对的形式输出最终结果。
这里面是两个过程,map把input拆分成k-v键值对,并行处理;reduce把map处理的输出作为输入进行shuffle,然后输出结果。
       Yarn是 通用资源管理系统,是Hadoop的资源管理器,客户端提交指令或者说作业,每个作业管理控制进程只负责管理一个作业,由yarn分配资源并调度。yarn的调度机制与K8S类似,它把每个节点node上面的资源看作多个固定内存大小(512MB)的分配单位, Container作为分配的基础,同时包含内存与CPU两种资源。
        yarn通过调度器FIFO决定资源分配的顺序, 在原生的 Hadoop YARN 资源调度机制中,如果提交一个计算Job处理的数据量较大、较长时间地占用整个Hadoop集群资源,会使得后提交的或优先级更高的Job处于等待状态,直到有资源被释放。这是一种典型的先来先调度机制,在强实时操作系统中并不是最优的调度算法。
       优化资源调度机制可以参考RTOS实时操作系统的几种经典调度算法:
       A、优先级调度或抢占式优先级调度。后启动的高优先级Job,能够抢占运行中的低优先级Job的资源;
       B、强实时调度——最早截止时间调度。根据任务的开始截止时间来确定任务的优先级,截止时间越早的任务拥有更高的优先级。
       C、最低松弛度优先调度。根据任务紧急或松弛程度来确定任务的优先级。
       实际上大数据包含的内容和组件很多,MapReduce算是三大核心之一,有机会再详细介绍大数据整体架构。

【数仓分布式执行】

        数仓MPP是一种 全对称分布式架构,由服务器组成的一个数据库集群。集群的核心包括协调节点Coordinator Node和数据节点Data Node, 业务应用下发 SQL 给Coordinator,Coordinator利用数据库的优化器生成执行计划。DN负责存储业务数据(支持行存、列存、混合存储)、执行数据查询任务以及向CN返回执行结果。

【数据湖】

       数据湖的本质,是由“数据存储架构+数据处理工具”组成的解决方案,而不是某个单一独立产品。数据存储架构,要有足够的扩展性和可靠性,要满足企业能把所有原始数据存起来的需求。一般来说湖中的数据包括来自关系数据库的结构化数据(行和列),半结构化数据(CSV、XML、JSON的日志),非结构化数据(电子邮件,文档,PDF)和二进制数据(图像、音频、视频),从而形成一个集中式数据存储容纳所有形式的数据。通常是对象块或文件,各大云厂商都喜欢用对象存储来做数据湖的存储底座。

        数据处理工具包括两种:第一类是数据管理/治理工具,解决的问题是如何把数据“搬到”湖里,包括定义数据源、制定数据访问策略和安全策略,并移动数据、编制数据目录等。并不是说数据湖可以存储各种数据就一股脑地全堆进去了,如果数据没有治理、管理,湖里的数据质量就没法保障,也没法使用。第二类工具是数据分析/挖掘工具,要对数据进行分析、挖掘、利用,比如要对湖里的数据进行查询,同时要把数据提供给机器学习、数据科学类的业务。

【数据湖和数据仓的区别】

        数据湖和数据仓最大的区别应该是放在其中的数据,数据仓虽然是面向分析,但是抽取数据来源还是结构化数据库,而且数仓中的数据也符合结构化的特点;数据湖包含各种类型的数据。数据仓库的数据可以给BI、业务分析等迅速获取洞察结果,用于决策支持;数据湖的数据更适合给机器学习、探索性分析、数据发现和大数据分析等。

       从数据含金量来比,数据仓库里的数据价值密度更高一些,数据的抽取和Schema的设计,都有非常强的针对性;而数据湖虽然也对数据进行一定的处理,但是明显没有数据仓那么标准化,更接近于先保存着、沉淀着,给数据编个目录让它们不要太乱,将来想用的时候再去湖里挖掘。

        还有最重要的一点,数据仓起步成本很高,研发成本也很高,如果要保证快速查询结果,那就需要做本地存储,而本地存储占用资源很高,只能尽可能地分层存储,冷热数据异构管理,冷数据定期迁移到对象存储减少成本;而数据湖本来就是用对象存储为底建设的,起步成本低。

【湖仓一体化】

       表面上看,数据仓库擅长BI、数据洞察离业务更近、价值更大,而数据湖里的数据,很难短时间看到价值。但是随着大数据和AI的火爆,尤其是生成式AI和大模型的炙手可热,能够提供机器学习的数据价值又重新被定义。特别是现在土地财政走到尾声,又没有新的经济增长点出现,很多地方开始考虑数据财政的可能性,尤其是数据确权和管理机制正在完善,数据资产登记和数据资产估值已经有变现价值的先例。

       数据的价值正在被看到,那么数据存储在哪里呢?

       因为数仓和数据库的出发点不同、架构不同,在实际研发和使用过程中,“性价比”差异很大。

数据湖起步成本很低,但随着数据体量增大,成本会加速飙升;而数仓从前期建设开支就很大。总之,一个后期成本高,一个前期成本高,如果用户想修湖又想建仓,那基本就是个烧钱游戏。

       既然都是拿数据为业务服务,数据湖和数仓能不能彼此整合一下,让数据重复使用,流动起来,少点重复建设呢?这就是湖仓一体化架构的由来。而且不仅湖仓可以结合,还能与大数据结合,形成一个一体化、开放式的数据处理平台。信通院今年发布的大数据关键词中,湖仓一体化占首位,数据平台发展进入融合一体化新阶段。

       湖仓一体架构最重要的一点,是实现“湖里”和“仓里”的数据/元数据能够无缝打通,并且“自由”流动。底层支持多数据类型统一存储,实现了一份数据、一套任务在数据湖、数据仓库之间无缝调度和管理,上层则通过统一接口进行访问查询和分析。湖仓一体也就是Lake House,又称为“智能湖仓”,打破了数据仓库与数据湖之间的壁垒,构建在数据湖低成本的对象存储之上,同时具备数据仓库的数据处理和管理能力。

       Lake House的核心功能,是要保证打通数仓对数据湖的直接访问,以及二者之间数据的自由流动。“Spectrum”是智能湖仓的核心组件,被称为Lake House引擎,实现的就是在湖与仓之间架起数据流动的管道。数据湖中的热数据和数据仓中的冷数据不仅可以无缝流动,还可以组合生成新的数据集,既可以插入到数仓中也可以插入数据湖中。

【智能湖仓】

        智能湖仓是亚马逊提出来的架构,如果理解为湖仓一体化就有点简单了。智能湖仓实际上是包含数据湖、数据仓、数据库、Nosql、大数据、日志流和机器学习等全过程、一体化架构。

上面是Amazon的智能湖仓架构,数据湖是中心,把数据湖作为中央存储库,其他各种数据存储和应用是围绕数据湖建立的“数据服务环”,包括了RDS、NOSQL、数仓、机器学习、大数据处理、日志分析等。

       这些服务与数据湖打通,既可以直接操纵湖内数据,也可以从湖中摄取数据,还可以向湖中回注数据,同时环湖的服务彼此之间也可以轻松交换数据。任何热门的数据处理服务,都在湖边;任何对口的数据都能无缝集成和移动,如果这个架构真的能够建成投入使用,可以说是把所有的数据库服务都整合起来了,从数据源定义、数据摄取和入湖入仓,到湖仓打通与集成,再到数据出湖、数据处理和数据消费,企业的使用轻松、方便又高效。

       这个架构的建设成本比数据中台低多了,数据湖的存储是对象存储,成本较低,扩展性还高,数据分析和处理服务可以用Serverless架构,存算分离降低成本,按使用量计费。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值