【摘要】
大数据、数据库、数据湖、数据仓库、湖仓一体化到智能湖仓。
【背景】
最近一直忙云原生的工作,前面的数仓积累都要丢干净了......偶然发现项目中也用了kettle之类的取数,又想起来之前做的大数据和数仓项目,重新梳理一下,免得以后彻底忘了。
【问题】
大数据和数据库、数据湖、数据仓库、湖仓一体化到智能湖仓,分别是什么
【整体介绍】
越来越觉得云计算真的很有意思。云原生算是入门吧,主要还是偏应用侧,开发、部署、运维和运营这些,关键是它深入了集群的概念(从传统的物理机/虚拟机集群转向了容器集群),按我的理解它主要是做分布式部署。
系统开发和应用不可能不考虑数据的,所以自然还要关注大数据架构。个人感觉大数据更侧重于取数、存数和算数,其中数据存储和计算也都是利用分布式集群,也需要一个集群调度的引擎,Hadoop架构中Apache Hadoop YARN就是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度。类比的话Yarn可以跟K8S一起看,便于理解,大数据的关键是分布式计算。
HDFS作为大数据的存储系统,有一个短板,那就是只能用来做大文件存储和访问,不适合大量小文件存储,而且在实际使用中,并不是所有的数据都可以用文件存储。HDFS更适合作为大数据计算本身需要的存储,配合HBase提供一个实时读写的分布式数据库系统,目的是提供计算能力。但是数据库存在一个先天不足,那就是数据库面向事务,更擅长做事务性工作,不擅长做分析性工作,于是就产生了数据仓库。
数据仓库可以理解成一个数据库集群,主要是用来做SQL的分布式执行MPP,而且也有一个调度的“大脑”Coordinator。数据仓库相当于一个集成化数据管理的平台,从多个数据源抽取有价值的数据,在仓库内转换和流动,所以数仓对于数据有一定要求,比如标准化、批量化、相对稳定、反应历史变化等,可以想象现实中仓库里面的箱子,这也是为什么数据需要做ETL甚至数据治理才能进入仓库。
对于系统采集来的各种数据,其中可能有结构化的、半结构化的、非结构化的,还有历史的、离线的等等,如果企业想把数据都保留下来,方便以后使用,数据库和数据仓都不适合。以往的解决思路是不同的数据存放在不同的存储里面,比如结构化数据放在数据库,文件化数据放在文件存储,碎片化数据放在对象存储等等,这样数据既不能流通,又没有统一的数据标准,还需要花费大量成本做各种各样的存储和维护。数据湖就是在这种需求下产生的,就好像现实中的湖泊,不管哪里来的水都能流入湖中,数据湖就相当于把各种形式和来源的数据当作水源,灌进去囤起来。数据湖也可以构建集群,基于Kubernetes提供集群调度和自动扩缩容能力,但并不是用来做应用的部署和运维,而是实现数据的分布式分析能力。
【大数据的分布式计算】
大数据分布式计算框架MapReduce,是基于Google发布的分布式计算框架MapReduce论文设计开发,用于大规模数据集(大于1TB)的并行运算。
MapReduce有几个优点:
1. 易于编程:编程仅需描述需要做什么, 而具体怎么去做就交由系统的执行框架处理。
【数仓分布式执行】
【数据湖】
数据湖的本质,是由“数据存储架构+数据处理工具”组成的解决方案,而不是某个单一独立产品。数据存储架构,要有足够的扩展性和可靠性,要满足企业能把所有原始数据存起来的需求。一般来说湖中的数据包括来自关系数据库的结构化数据(行和列),半结构化数据(CSV、XML、JSON的日志),非结构化数据(电子邮件,文档,PDF)和二进制数据(图像、音频、视频),从而形成一个集中式数据存储容纳所有形式的数据。通常是对象块或文件,各大云厂商都喜欢用对象存储来做数据湖的存储底座。
数据处理工具包括两种:第一类是数据管理/治理工具,解决的问题是如何把数据“搬到”湖里,包括定义数据源、制定数据访问策略和安全策略,并移动数据、编制数据目录等。并不是说数据湖可以存储各种数据就一股脑地全堆进去了,如果数据没有治理、管理,湖里的数据质量就没法保障,也没法使用。第二类工具是数据分析/挖掘工具,要对数据进行分析、挖掘、利用,比如要对湖里的数据进行查询,同时要把数据提供给机器学习、数据科学类的业务。
【数据湖和数据仓的区别】
数据湖和数据仓最大的区别应该是放在其中的数据,数据仓虽然是面向分析,但是抽取数据来源还是结构化数据库,而且数仓中的数据也符合结构化的特点;数据湖包含各种类型的数据。数据仓库的数据可以给BI、业务分析等迅速获取洞察结果,用于决策支持;数据湖的数据更适合给机器学习、探索性分析、数据发现和大数据分析等。
从数据含金量来比,数据仓库里的数据价值密度更高一些,数据的抽取和Schema的设计,都有非常强的针对性;而数据湖虽然也对数据进行一定的处理,但是明显没有数据仓那么标准化,更接近于先保存着、沉淀着,给数据编个目录让它们不要太乱,将来想用的时候再去湖里挖掘。
还有最重要的一点,数据仓起步成本很高,研发成本也很高,如果要保证快速查询结果,那就需要做本地存储,而本地存储占用资源很高,只能尽可能地分层存储,冷热数据异构管理,冷数据定期迁移到对象存储减少成本;而数据湖本来就是用对象存储为底建设的,起步成本低。
【湖仓一体化】
表面上看,数据仓库擅长BI、数据洞察离业务更近、价值更大,而数据湖里的数据,很难短时间看到价值。但是随着大数据和AI的火爆,尤其是生成式AI和大模型的炙手可热,能够提供机器学习的数据价值又重新被定义。特别是现在土地财政走到尾声,又没有新的经济增长点出现,很多地方开始考虑数据财政的可能性,尤其是数据确权和管理机制正在完善,数据资产登记和数据资产估值已经有变现价值的先例。
数据的价值正在被看到,那么数据存储在哪里呢?
因为数仓和数据库的出发点不同、架构不同,在实际研发和使用过程中,“性价比”差异很大。
数据湖起步成本很低,但随着数据体量增大,成本会加速飙升;而数仓从前期建设开支就很大。总之,一个后期成本高,一个前期成本高,如果用户想修湖又想建仓,那基本就是个烧钱游戏。
既然都是拿数据为业务服务,数据湖和数仓能不能彼此整合一下,让数据重复使用,流动起来,少点重复建设呢?这就是湖仓一体化架构的由来。而且不仅湖仓可以结合,还能与大数据结合,形成一个一体化、开放式的数据处理平台。信通院今年发布的大数据关键词中,湖仓一体化占首位,数据平台发展进入融合一体化新阶段。
湖仓一体架构最重要的一点,是实现“湖里”和“仓里”的数据/元数据能够无缝打通,并且“自由”流动。底层支持多数据类型统一存储,实现了一份数据、一套任务在数据湖、数据仓库之间无缝调度和管理,上层则通过统一接口进行访问查询和分析。湖仓一体也就是Lake House,又称为“智能湖仓”,打破了数据仓库与数据湖之间的壁垒,构建在数据湖低成本的对象存储之上,同时具备数据仓库的数据处理和管理能力。
Lake House的核心功能,是要保证打通数仓对数据湖的直接访问,以及二者之间数据的自由流动。“Spectrum”是智能湖仓的核心组件,被称为Lake House引擎,实现的就是在湖与仓之间架起数据流动的管道。数据湖中的热数据和数据仓中的冷数据不仅可以无缝流动,还可以组合生成新的数据集,既可以插入到数仓中也可以插入数据湖中。
【智能湖仓】
智能湖仓是亚马逊提出来的架构,如果理解为湖仓一体化就有点简单了。智能湖仓实际上是包含数据湖、数据仓、数据库、Nosql、大数据、日志流和机器学习等全过程、一体化架构。
上面是Amazon的智能湖仓架构,数据湖是中心,把数据湖作为中央存储库,其他各种数据存储和应用是围绕数据湖建立的“数据服务环”,包括了RDS、NOSQL、数仓、机器学习、大数据处理、日志分析等。
这些服务与数据湖打通,既可以直接操纵湖内数据,也可以从湖中摄取数据,还可以向湖中回注数据,同时环湖的服务彼此之间也可以轻松交换数据。任何热门的数据处理服务,都在湖边;任何对口的数据都能无缝集成和移动,如果这个架构真的能够建成投入使用,可以说是把所有的数据库服务都整合起来了,从数据源定义、数据摄取和入湖入仓,到湖仓打通与集成,再到数据出湖、数据处理和数据消费,企业的使用轻松、方便又高效。
这个架构的建设成本比数据中台低多了,数据湖的存储是对象存储,成本较低,扩展性还高,数据分析和处理服务可以用Serverless架构,存算分离降低成本,按使用量计费。