暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

大数据序列十九:Data Lake-数据湖?

码上飞驰 2021-12-01
1128

什么是数据湖?


        Data Lake(数据湖)最早是由BIPentaho的创始人兼CTO,在2010年10月纽约Hadoop World大会上提出来的。

        他对数据湖的解释是:如果说数据集市、数据仓库里面是瓶装的水——它是清洁的、打包好的、摆放整齐方便取用的;那么数据湖里面就是原生态的水——它是未经处理的,原汁原味的。数据湖中的水从源头流入湖中,各种用户都可以来湖里获取、提纯这些水(数据)。

        


数据湖的定义

        到目前为止,数据湖仍然没有一个标准的定义。看看业界的主流定义:

        维基百科的定义:

        数据湖是指使用大型二进制对象或文件这样的自然格式储存数据的系统。它通常把所有的企业数据统一存储,既包括源系统中的原始副本,也包括转换后的数据,比如那些用于报表、可视化、数据分析和机器学习的数据。数据湖可以包括:结构化数据(行与列)、半结构化的数据(CSV、日志、XMLJSON),非结构化数据 (电子邮件、文件、PDF) 和 二进制数据(图像、音频、视频)

        亚马逊的定义:

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

            如图:

        阿里的定义:

         数据湖是统一存储池,可对接多种数据输入方式,您可以存储任意规模的结构化、半结构化、非结构化数据。数据湖可无缝对接多种计算分析平台,直接进行数据处理与分析,打破孤岛,洞察业务价值。同时,数据湖提供冷热分层转换能力,覆盖数据全生命周期。

        数据湖的本质其实都包含如下部分:

        1、统一的存储系统。

        2、存储原始数据。

        3、丰富的计算模型/范式。

        4、数据湖与上云无关。

        开源大数据的Hadoop HDFS存储系统就是一个标准的数据湖架构,具备统一的原始数据存储架构。


数据湖的能力

        如上图:

        数据集成能力

        需要具备把各种数据源接入集成到数据湖中的能力。数据湖的存储也应该是多样的,比如HDFS、Hive、HBase等等。

        数据治理能力

        治理能力的核心是维护好数据的元数据(Metadata)。强制要求所有进入数据湖的数据必须提供相关元数据,应该作为最低限度的治理管控。没有元数据,数据湖就面临成为数据沼泽的风险。

        数据搜索和发现能力

        如果把整个互联网想象成一个巨大的数据湖。那么,之所以人们可以这么有效的利用这个湖中的数据,就是因为有了Google这样的搜索引擎。人们可以通过搜索,方便地找到他们想要的数据,进而进行分析。搜索能力是数据湖的十分重要的能力。

        数据安全管控能力

        对数据的使用权限进行管控,对敏感数据进行脱敏或加密处理,也是数据湖能商用所必须具备的能力。

        数据质量检验能力

        数据质量是分析正确的关键。因此必须对进入数据湖中的数据的质量情况进行检验。及时发现数据湖中数据质量的问题。为有效的数据探索提供保障。

        数据探索能力

        应该具备一系列好用的数据分析工具,以便各类用户可以对数据湖中的数据进行自助探索。包括:

        1:支持对流、NoSQL、图等多种存储库的联合分析能力。

        2:支持交互式的大数据SQL分析。

        3:支持AI、机器学习分析。

        4:支持类似OLAP的BI分析。

        5:支持报表的生成。



数据湖 & 数据仓库

        数据仓库(1990+提出),由其被广泛接受的定义是,一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策,通常也被认为是决策支持型应用的必要条件。

        数据仓库最初是针对事务型数据系统而制定的,随着大数据技术的发展,基于大数据的数据仓库越来越普及。

        数据湖有所不同,它存储来自业务线应用程序的关系数据,以及来自移动应用程序、IoT 设备和社交媒体的非关系数据。捕获数据时,未定义数据结构或 Schema。这意味着可以存储所有数据,而不需要精心设计也无需知道将来可能需要哪些问题的答案。可以对数据使用不同类型的分析(如 SQL 查询、大数据分析、全文搜索、实时分析和机器学习)来获得信息。

        Schema On Write:即在存储数据时就需要设计好Schema。数据仓库是Schema On Write;    

        Schema On Read:即在使用数据时才需要Schema信息。对数据写入没有限制,数据湖可以更容易的收集数据。数据湖是Schema On Read;

        在数据湖的发展过程中,湖仓一体(Data Lakehouse)的概念被推上了风口浪尖。湖仓一体机构的出现结合了传统数据仓库和数据湖的优势。湖仓一体的出现使得数据的存储变得更加廉价和具有弹性,湖仓一体有一些关键特性:

        1:事务支持。

        2:Schema支持。

        3:端到端的流式支持。

        4:计算存储分离。

        湖仓一体通常会借助开源的Delta LakeHudiIceberg等组件,将底层的数据存储格式进行统一,并支持各种数据分析引擎对数据进行查询。



数据湖解决方案    

        云厂商解决方案

        数据湖作为当前的一个风口,各大云厂商(阿里、华为、亚马逊、微软等)纷纷推出自己的数据湖解决方案及相关产品。

       阿里云:Data Lake Analytics,通过标准JDBC直接对阿里云OSS、TableStore、RDS、MongoDB等不同数据源中存储的数据进行查询和分析。DLA 无缝集成各类商业分析工具,提供便捷的数据可视化。阿里云OSS 可以存储各种结构化、半结构化、非结构化的数据,可以当做一个数据湖的存储库。DLA 使用前需要创建Schema 、定义表,再进行后续分析。

        开源解决方案

        目前市面上流行的三大开源数据湖方案分别为:Delta LakeApache Hudi Apache Iceberg

        Databricks 团队2019年开源了 Delta Lake 框架, Delta Lake 是存储层,为数据湖带来了可靠性。Delta Lake 提供 ACID 事务、可伸缩的元数据处理,并统一流和批数据处理。Delta Lake运行在现有数据湖之上,与Apache Spark API完全兼容。架构图如下:

        数据湖的理念很好,但是它现在还缺乏像数据仓库那样,有一整套方法论为基础,有一系列具有可操作性的工具和生态为支撑。

        比如:

        数据沼泽:当越来越多的数据接入到数据湖中,但是却没有有效的方法跟踪这些数据,数据沼泽就发生了。在这种失败中,人们把所有东西都放在数据湖中,期望以后可以发掘些什么,可没多久他们就忘那里有什么

        数据泥团:各种各样的新数据接入进数据湖中,它们的组织形式、质量都不一样。由于缺乏用于检查,清理和重组数据的自助服务工具,使得这些数据很难创造价值。

        缺乏自助分析工具:由于缺乏好用的自助分析工具,直接对数据湖中的数据分析很困难。一般都是数据工程师或开发人员创建一个整理后的小部分数据集,把这些数据集交付给更广泛的用户,以便他们使用熟悉的工具进行数据分析。这限制了更广泛的人参与到探索大数据中,降低了数据湖的价值

        缺乏建模方法论和工具:在数据湖中,似乎每一项工作都得从头开始,因为以前的项目产生的数据几乎没有办法重用。其实,我们抱怨数据仓库很难变化以适应新需求,这其中有个原因就是它花很多时间来对数据进行建模,而正是有了这些建模,使得数据可以共享和重用。数据湖也需要为数据建模,不然每次分析师都得从头开始

        缺少数据安全管理:通常的想法是每个人都可以访问所有数据,但这是行不通的。企业对自己的数据是有保护本能的,最终一定是需要数据安全管理的

        一个数据湖搞定一切:大家都对能在一个库中存储所有数据的想法很兴奋。然而,数据湖之外总会有新的存储库,很难把他们全都消灭掉。其实,大多数公司所需的,是可以对多种存储库联合访问功能。是不是在一个地方存储,并不是那么重要。


    数据湖在概念层面还是有些混乱的。它缺少一系列标准化的、完善的定义。在实现层面,数据湖在架构上还不成熟。还缺乏一整套的方法论、工具和生态圈。数据湖仍在不断演化。在大数据时代,人们对数据湖能解决的一些问题,还是有需求的。



开源数据湖三剑客

        目前开源社区并没有针对数据湖的比较成熟的、完整的解决方案。

        几个大厂在开发相关技术来解决内部遇到的一些痛点后,开源了几个项目,比较著名的有 Databricks 的 Dalta Lake,Uber 开源的 Hudi,Netflix 开源的 Iceberg,俗称"数据湖三剑客"。

        Delta Lake

        Delta Lake 是 Spark 计算框架和存储系统之间带有 Schema 信息的存储中间层(Delta Lake 是与 Spark 强耦合的)。它的重要特性包括:

        1:设计了基于 HDFS 存储的元数据系统,解决 metastore 不堪重负的问题。

       2:支持更多种类的更新模式,比如 Merge / Update / Delete 等操作,配合流式写入或者读取的支持,让实时数据湖变得水到渠成。

        3:流批操作可以共享同一张表。

        4:版本概念,可以随时回溯,避免一次误操作或者代码逻辑而无法恢复的灾难性后果。

        Delta Lake 其实只是一个 Lib 库(API),不需要单独部署,而且直接依附于计算引擎的(目前只支持 Spark 引擎),使用过程中和 parquet 唯一的区别是把 formatparquet 换成 delta 即可,部署和使用成本极低。


        Hudi

        Hudi 的设计目标正如其名,Hadoop Upserts Deletes and Incrementals(原为Hadoop Upserts anD Incrementals),强调了其主要支持 Upserts、Deletes 和Incremental 操作。

        Hudi数据集通过自定义的 InputFormat 兼容当前 Hadoop 生态系统,包括 Spark、Flink、Hive、Presto,使得终端用户可以无缝的对接。


        Iceberg

        Iceberg 作为新兴的数据湖框架之一,开创性的抽象出 "表格式"(table format)这一中间层,既独立于上层的计算引擎(如Spark和Flink)和查询引擎(如Hive和Presto),也和下层的文件格式(如 Parquet、ORC、Avro)相互解耦。

        此外 Iceberg 还提供了许多额外的能力:

        1:ACID事务。

        2:时间旅行(time travel),以访问之前版本的数据。

        3:完备的自定义类型、分区方式和操作的抽象。

        4:列和分区方式可以进化,而且进化对用户无感,即无需重新组织或变更数据文件。

        5:隐式分区,使SQL不用针对分区方式特殊优化。

        6:面向云存储的优化等。

        Iceberg的架构和实现并未绑定于某一特定引擎,它实现了通用的数据组织格式,利用此格式可以方便地与不同引擎(如Flink、Hive、Spark)对接。

        Iceberg 的架构也更加的优雅,对于数据格式、类型系统有完备的定义和可进化的设计。


小结

        三个引擎的初衷场景并不完全相同,Hudi 为了 incremental 的 upserts,Iceberg 定位于高性能的分析与可靠的数据管理,Delta 定位于流批一体的数据处理。这种场景的不同也造成了三者在设计上的差别。

        随着时间的发展,三者都在不断补齐自己缺失的能力,可能在将来会彼此趋同,互相侵入对方的领地。当然也有可能各自关注自己专长的场景,筑起自己的优势壁垒,因此最终谁赢谁输还是未知之数。




                                      ╭─  ─  ─  ─  ─  ─  ─  ─  ─  ─╮
                                      ┃      Flying  Young   
                               ─  ─  ─  ─  ─  ─  ─  ─  ─  ─  ─  ─  ─╯



文章转载自码上飞驰,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论