前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么是数据湖?

什么是数据湖?

作者头像
木野归郎
发布2023-02-25 18:49:36
9060
发布2023-02-25 18:49:36
举报
文章被收录于专栏:share ai happiness

前言

数据存储是人类千百年来都在应用并且探索的主题。在原始社会,人类用树枝和石头来记录数据。后来,人类制造了铁器,用铁器在石头上刻画一些象形文字来记录数据,而此时,语言还没有形成,人们记录的东西只有自己才可以看懂。从使用树枝和石块记录数据和用铁器在石头上刻画一些形象文字,到通过竹简和纸张,再到通过计算机保存在软盘,硬盘等设备上。随着技术的发展,信息数据的量越来越大和复杂度越来越高。特别是在近几十年,数据已经呈几何指数增长,早在2012年,就已经宣称大数据时代到来。随着物联网的普及,越来越多的数据将被生产出来。

在这个大数据时代,每一天,能产生多少数据呢?

据IDC发布《数据时代2025》的报告显示,全球每年产生的数据将从2018年的33ZB增长到175ZB,相当于每天产生491EB的数据。

那么175ZB的数据到底有多大呢?1ZB相当于1.1万亿GB。如果把175ZB全部存在DVD光盘中,那么DVD光盘叠加起来的高度将是地球和月球距离的23倍(月地最近距离约39.3万公里),或者绕地球222圈(一圈约为四万公里)。目前美国的平均网速为25Mb/秒,一个人要下载完这175ZB的数据,需要18亿年。

据IDC预测,2025年,全世界每个联网的人每天平均有4909次数据互动,相当于每18秒产生1次数据互动。

对于如此海量的数据出现,大量的新技术和新概念涌出。数据湖就是在此背景下诞生的。

本文有七千字,预计阅读15分钟,可以先关注

大数据初现

大数据的前身是集群计算,那时的集群并不是以分布式存储为基础,而是以分布式计算为基础。在大数据还没有出现的年代,我们已经有了突破单机系统的需求,希望以同配置的多个服务器构成集群来解决大型的计算问题。最开始的集群通常是同构的,也就是同样的配置,同样的操作系统,这样最大程度地降低了用于集群管理的软件系统的复杂性。这个事情,技术上主要的关注点是分布式网络性能、集群的高可用、集群资源的调度,于是我们有了C10K问题(网络连接数据到达10K后如何保持高性能和稳定性),于是有了单点问题的解决方案(管理节点的热备或冷备),于是有了对大规模集群的分布式资源与任务调度。

那时的存储是怎么解决的呢,还没有支持分布式存储的数据库。是的,存储仍然是集中的,数据在关系数据库或通过NFS范围的网络共享存储上,计算任务需要的输入数据被打包成二进制数据在网络上传输,到另外一个分配到的计算节点上计算;或者计算任务只是获得了一个输入数据的路径,直接由计算节点去获取输入数据。分布式的计算任务完成后,将输出数据传送回客户端节点进行汇聚,计算节点上会缓存一部分输入数据。是不是很像MapReduce的过程?

集中式的存储带来了巨大的单点性能和稳定性问题,在谷歌这类拥有巨量数据的公司感受尤为强烈。当时的谷歌处于创新的高峰期,隐隐觉得谷歌在分布式计算方面一定会有所突破,于是有了谷歌的三驾马车:MapReduce/GFS/BigTable。

后来开源大数据的启动大家也应该都了解了,HDFS/Hadoop成为了大数据事实上的标准。建立在HDFS分布式存储和MapReduce分布式计算基石上的大数据系统,将分布式系统的架构推进了一大步,而且解决了集中存储的单点问题,由于数据分散在集群内的各个节点,本地计算和DataLocality对分布式计算的加速起了重要作用。

火爆的大数据

大数据形态发展起来后,相对于传统的成熟的关系型数据库,大数据平台提供的二次开发接口MapReduce尽量抽象和简化,提供的是很简单的分治和汇聚的接口,降低了入门的门槛,但也提高了应用构建的门槛,用户需要自己去编写分布式应用程序,分割数据,并行化,管理计算任务直接的依赖关系。这些工作在关系数据库应用时代是不需要关注的,所以,开发一个分布式大数据应用,是足够复杂的。如何改进?于是有了两个演进浪潮。

第一个浪潮是Hive的出现。HiveQL以类sql的方式支持以SQL语法来对存储在分布式系统中的数据进行MapReduce运算。这简直是数据库应用开发者的福音。Hive也顺着这个方向一路狂奔,对SQL的支持越来越好,容错也越来越好(这对其他开源组件不是个好事情,比如在Hive往Spark迁移时可能会发现很多写好的HiveSQL语句在Spark并不支持)。虽然因为shuffle和reduce输出都存储在磁盘导致速度上慢点,但是好用,稳定性高,结果可预期,执行时间可预期。

第二个浪潮是Spark分布式计算引擎。针对MapReduce的大量磁盘操作导致的龟速,Spark尽可能的将数据放在内存来加速。这是其中一个大家都会讲的Spark的优势。但其实还有另外一个很重要的方面是Spark在分布式计算框架上的划时代设计。在构建分布式应用时,通常我们认为可以完全并行执行的逻辑可以放入Map逻辑,前后有依赖,需要汇总的逻辑放入reduce。而对分布式应用构建熟悉的人就会想到这里面可能会有数据处理的pipeline,形成一个有向无环图DAG。Spark之前这个有向无环图是实际存在,但是由开发者自己去构建和维护的。Spark对分布式的编程模型进行了MapReduce之上的更高一层的抽象,支持了更为丰富的类MapReduce算子,用户可以像写lamda表达式一样对算子进行级联,而不用去关注数据之间的并行和依赖关系。这个并行和依赖关系由Spark自己去分析和分解。

百花齐放的开源

在Hive,Spark的触发下,开源大数据生态呈现了百花齐放的急速发展,涌现了解决某一环节或某一类场景的开源组件,成为大数据技术拼图中不可或缺的一块。

一、资源与任务调度

Hadoop在初期提供了简单的Map/Reduce任务调度,资源的管理和任务的调度逻辑混在一起,在Hadoop V2,Yarn被提出试图参考业界优秀的调度器实践,将资源调度和任务调度进行解耦。队列间调度和队列内调度都可以应用DRF(Dominant Resource Fairness,主资源公平)调度算法来支持多维度的资源调度。虽然这种解耦相比较其他调度器来说做的并不彻底,但因为自己的生态优势也得到了广泛的关注和持续的发展。

Mesos是另外一个开源的将资源调度和任务调度解耦的分布式调度器,并且将解耦和分层做的很彻底,但是由于生态方面的弱势,一直没有能够得到广泛的应用。

二、数据存储格式

HDFS的原始数据块存储很通用但并不高效,于是ORC和Parquet高性能列式存储格式出现。由于大数据查询和分析中经常需要获取一个表格中的某些符合条件的列数据,列式存储的优势是获取数据表格数据时只需要扫描需要的列,避免扫描行级的全表扫描。在这两种格式上也出现了两种黄金组合:Hive + Orc 和 Spark + Parquet。

三、流处理

Flink的流行改变了大数据处理重批处理轻实时性的历史,意图从设计之初就把流处理的需求考虑进去。但也并没有止步于流式处理,在批处理上做了针对性的改进,提供流批一体的实时分布式计算引擎。

是不是有了Flink,Spark就不需要了呢?目前这个恐怕这只是美好的愿望。就像当年Spark喊着要干掉Hive一样,Hive由于稳定性高易用皮实,大数据生态中一直都有一席,Spark这么多年还是没有能干掉Hive。围绕Spark的生态目前比Flink还是要成熟很多,Spark社区仍然很活跃,最近的Spark3.0有很多重大改进。

四、交互式分析

Presto的出现解决了跨越多个数据源的实时交互式分析场景的需求,Presto架构采用类似MPP数据库的架构,只提供数据分析引擎,大量使用内存,存储方面提供多个存储引擎的connector,并提供扩展机制对接其他存储引擎。由于这种设计,Prestor获得了跨越数据源和实时性的优势。

数据仓库

数据仓库的理论和技术本身是和大数据领域是并行发展的,由于MPP数据库的蓬勃发展,数仓对于数据量的支撑也来到了TB级别。从分工上来说,大数据技术在往数据湖的方向发展,也就是多源多模、数据查询与分析框架、流批一体框架、AI数据分析这些方向,通常是作为企业数据平台的基石,更贴近数据源。而数仓是通常是存储经过处理和加工后的数据,意图提供高性能和高并发的查询应用。

数仓理论发展已经很成熟了。在数据仓库建模方法上有范式建模和维度建模之分。

范式建模(Third Normal Form,3NF),主要解决关系型数据库的数据存储,通过实体关系(Entity Relationship,ER)模型描述企业业务

维度建模,专门用于分析型数据库、数据仓库、数据集市建模的方法。将数据类型分解为维度表和事实表。维度建模有这么几种常用模式:

星型模式(Star Schema):由一个事实表和一组维表组成

雪花模式(Snowflake Schema):在星型模型基础上将维表进行扩展,每个维度表可以继续向外连接多个子维表

数仓建模需要熟悉建模理论和方法,而且对业务数据需要由透彻的理解。

典型的数仓架构如下图(引用自网络)

在数仓的数据分层上,有DWI/DWD/DWS之分:

DWI (Data Warehouse Integration)or SDI (Source Data Integration):贴源层,通常保持与源数据相同的表结构

DWD(Data Warehouse Detail) or ODS(Operation DataService):明细层,公共的原子数据存储

DWS(Data Warehouse Service):汇聚层,基于原子数据的公共汇总数据

ADS(Application Data Service) or DM(Data Market):集市层,个性化场景和指标加工。

以上技术发展路径奠定了数据湖发展的基础,下面我们看看把数据湖打开看看。

一、什么数据湖(Data Lake)

第一次看到数据湖这个词,大部分人都很自然的想到有大量的数据的。湖这个字很有意思,笔者认为这个字表明了三层意思:

1) 湖是天然的

2) 湖之上有海。湖并不是最大合集

3) 湖中水的绝对很多。湖之下有河

4) 湖中的水是一个不可分割的整个

数据湖,可以理解为天然的,未加修饰的大量数据的仓库。对于数据湖在业界并没有非常准确的定义。这个概念最早由Pentaho公司的首席技术官James Dixon于2010年提出。数据湖概念的提出,很大程度上是为了解决数据信息孤岛(information siloing)的问题。用单一的仓库存放用于分析的大量的数据。

根据维基百科的定义,数据湖是指“使用大型二进制对象或文件这样的自然格式储存数据的系统 。它通常把所有的企业数据统一存储,既包括源系统中的原始副本,也包括转换后的数据,比如那些用于报表, 可视化, 数据分析和机器学习的数据。”

AWS对数据湖的定义更加的直接。“数据湖是一个集中式的存储库,允许您以任意规模存储所有结构化和非结构化的数据。您可以按原样存储数据(无需先对数据进行结构化处理),并运行不同类型的分析 – 从控制面板和可视化到大数据处理、实时分析和机器学习,以指导做出更好的决策。”

对数据湖的定义,只是一个概念,而不是一个产品。对于数据具体是怎么实现的,包含哪些组件,物理部署是怎么样的,其实并没有统一的定义。通常上,数据湖在实现上应该是一个数据存储平台(比如Hadoop,Azure Data Lake Storage)。最初对数据湖的认识是只需要存储原始数据,渐渐的,现在提出来数据湖也应该有数据管理。在注入数据的时候可以不经过任何的处理,但是对于在数据湖中的数据也可以进行适当的分类和管理以保证数据的可追踪性,也识别性和安全性。没有数据管理的数据湖最终会变成数据沼泽(Data Swamp)。

数据湖和数据仓库(Data Warehouse)两者并没有直接的关系,他们属于两个并行的概念。很多人误认为数据湖的出现是为了替代数据仓库。其实数据仓库和数据湖是解决了不同的问题,适用于不同场景的两套解决方案。数据仓库是比数据湖更早提出来的概念,数据仓库是由数据仓库之父W.H.Inmon于1990年提出。数据仓库主要是用于处理结构化的数据,需要对放入数据仓库的数据进行预先的数据模型定义,而数据湖对数据源没有特别的要求。

数据湖是采用自下而上的处理方式,既先“先存储,再分析”。

数据仓库是需要先分析数据,对数据进行建模,再存储。

在非结构化数据和大数据时代,对数据的预先分析和建模越来越困难,数据湖更有可能成为大数据时代最佳的选择。

从架构上来说,数据湖是计算和存储的解耦。而数据仓库是将计算和存储重度耦合在一起。

下面列出了数据仓库和数据湖的主要区别(引用自网络)

数据湖并没有一个统一的架构规范,数据湖的最终落地形态也是基于不同组织的实际需求,已有的IT基础架构和技术选择做出的。

二、为什么需要数据湖

前文提到过,大数据时代已经加速到来了。数据湖这一概念也是随着大数据诞生的,甚至被称为“云上大数据的最佳拍档”。数据湖在处理高速生成的大量数据时,提供了更灵活的解决方案。

任何概念和定义都是很好的,但是一个技术是否应该使用,还是看各个组织的需求。InsideBigData对此有四条建议:

l 数据的结构是怎样的

数据湖并不适用于已经拥有大量结构化数据组织。对于有大量非结构化或者半结构化数据的组织,应该优先考虑数据湖。

如果现在正在使用关系型数据库,但是频繁的更改数据库的结构,也说明数据库可能并不是最优的解决方案。数据湖可以支持未经加工的数据直接入湖。

l 你的 ETL 过程有多复杂

如果在尝试将半结构化和非结构化数据调整适应到关系数据库方面遇到了很大的困难,可以使用数据湖。

l 数据保持是问题吗

如果拥有海量数据,而且需要长期保存大量的历史数据,数据湖在低成本存储上有天然优势。可以很容易的做到数据的分层来降低数据保存成本。数据湖是横向扩展的,数据湖能够轻易的扩容以应对未来告诉的数据增长。

l 你的用例是可预测的还是实验性的

对于不可预测的数据(如机器学习等),是很难预先进行数据建模的。这种情况下,数据湖也是更好的选择。

我们需要明白,数据湖是一种存储数据的技术,但是其最终的目的是更好的分析这些数据,既提供Analytics As a Service。Aberdeen 的一项调查表明,实施数据湖的组织比同类公司在有机收入增长方面高出 9%。AWS认为数据湖能够在更短的时间内从更多来源利用更多数据,并使用户能够以不同方式协同处理和分析数据,从而做出更好、更快的决策。

数据湖的生态

当前的已经有众多的商用和开源数据湖方案。例如AWS和微软的Azure都提供了一系列数据湖服务。数据存储,数据移动,数据分析和预测很好的结合起来。开源方案中,目前市面上有三个方案分别是:Delta,Apache Iceberg和Apache Hudi。三套开源方案有自己的优缺点,目前还没有谁能完全脱颖而出,预计在未来几年,社区的活跃度和生态的健康度,将决定这三大开源方案未来的走势。

数据湖是企业IT基础设施中的一环,配合各种分析工具,在IT基础设施中扮演很重要的角色。数据湖在各种大型组织或者快速发展的组织中,扮演越来越重要的地位。当今的数据分析和预测的方法越来越复杂,CPU的算力非常强大。但是“快计算,慢IO”的这个问题一直没有得到很好的解决。数据湖在应用场景中,通过分布式技术解决了海量数据存储的问题也给性能带来了提升。在企业的实际使用中,数据湖和数据仓库并没有互斥性,根据不同的业务特性可以使用不同的技术。数据湖为单独的技术来讨论在组织实践中意义不大。还是应该将整个系统的数据流和相应的工具全盘考虑。一个数据流有他独特的生命周期,这个生命周期中会涉及到各种技术。

一、来源

数据的来源多种多样,有日志,文件和对象等非结构化数据。也有ERP等结构化数据。

二、提取和转换

数据源需要经过提取和转换,包括各种技术手段比如数据建模,Spark等,经过转换的数据会进入数据存储。

三、存储

数据存储有数据湖和数据仓库。两者可以同时存在。数据湖天然对大数据有亲缘性。在于他的灵活性和易维护性。

四、查询和处理

在数据湖的数据,还需要经过进一步的查询和分析,最后输出。

Iceberg

虽然Iceberg一直被称为数据湖三大解决方案之一,但是准确的来说,Iceberg并不是一个数据湖的解决方案,而是数据湖概念中的一个环节,之前我们说过,数据湖是和计算解耦的。数据湖的数据是非结构化的,如何将非结构化的数据和计算引擎进行适配,便是Iceberg的任务。Iceberg更像是一个介于底层存储和计算之间的中间件,他定义了元数据的组织方式,提供了类似表查询的语言。Iceberg的底层存储系统依然可以是HDFS。

Iceberg官网上有Iceberg的自我介绍:Iceberg是一个为大规模数据集设计的通用的表格形式。

Apache Iceberg是由Netflix开发开源的,2018年11月16日进入Apache孵化器。Iceberg有两大目标:

  1. 成为静态数据交换的开放规范
  2. 高扩展性和可靠性(这一点是几乎所有的分布式系统,可以忽略)
  3. 修复持续的可用性问题

其主要设计思想是跟踪表中所有文件的所有变化。Iceberg跟踪的是单个的文件,一个manifest会包含多个含有数据的物理文件,这样做的好处是可以在查询文件数据的时候避免了昂贵的list操作。下图是一个基本的Iceberg的结构。Iceberg支持snapshot功能,一个snapshot(s0和s1)代表的是表在某个时刻的状态。每个快照包含在某个时刻所有数据文件的列表(manifest list),manifest list存储的是清单文件(manifest),manifest里面记录了物理文件的信息。

为什么选择Iceborg?

在业界,经常使用Iceborg解决了以下几个问题:

1)大量小文件处理,通过优化文件扫描能够更快的定位需要加载的文件,提升读效率,避免了频繁读取小文件时低效的索引方式。

2)与计算引擎低耦合,Iceberg并不绑定与某一特定的计算引擎,对于公司的IT建设非常有好处。

微软Azure Data Lake

微软已经提供了完整的生态工具,整个生态非常完整,有很多技术可供选择和使用。

  1. 通过AzCopy进行数据导入
  2. 使用Azure ML将数据预测结果导入到数据仓库
  3. 提供了Data Catalog管理元数据,可以替代HDInsight/Spark的Azure Data Lake Analytics

数据湖有什么特别

数据湖的形态发展至今,保留了大数据生态的灵活性和生态的优势外,也在往数仓的性能和企业能力上发展。最近几年提出的LakeHouse概念是数据湖的延伸,关键特征是:

事务支持:支撑并发读写数据场景,对ACID事务支持确保可使用SQL并发读写数据。

数据Schema治理(Schema enforcement and governance):支持数仓的范式(如star/snowflake-schemas)。该系统应该能够推理数据完整性(比如schema自动识别),并具有健壮的治理和审计机制。

BI支持:支持直接在源数据上使用BI工具。降低必须同时在数据湖和数据仓库中操作两个数据副本的成本。存储与计算分离:存储和计算使用单独的集群,支持更多用户并发和更大数据量。

开放性:使用的存储格式(如Parquet)是开放式和标准化的,并提供API以便各类工具和引擎(包括机器学习和Python / R库)可以直接有效地访问数据。

支持从非结构化数据到结构化数据的多种数据类型:可用于存储、优化、分析和访问多种数据应用所需的包括图像、视频、音频、半结构化数据和文本等数据类型。

支持各种工作负载:包括数据科学、机器学习以及SQL和分析。可能需要多种工具来支持这些工作负载,但它们底层都依赖同一数据存储库。

端到端流:实时报表支持,对流的支持消除了需要构建单独系统来专门用于服务实时数据应用的需求。

参考文献:

[1] https://www.ituring.com.cn/book/tupubarticle/2825

[2] https://www.huxiu.com/article/380785.html

[3] https://iceberg.apache.org/docs/latest/

[4] https://zhuanlan.zhihu.com/p/145671783

[5] http://www.jamesserra.com/archive/2015/12/why-use-a-data-lake/

[6] https://developer.aliyun.com/article/775390

[7] https://codeantenna.com/a/zcgICNkUpZ

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OnlyCoding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档