0

0

实时方案之数据湖探究调研笔记

看不見的法師

看不見的法師

发布时间:2025-10-04 10:09:31

|

955人浏览过

|

来源于php中文网

原创

数据湖是当前备受关注的一个概念,许多企业正在构建或计划构建自己的数据湖。在启动数据湖项目之前,理解数据湖的本质,明确数据湖项目的基本组成,并设计出数据湖的基本架构,对于成功构建数据湖至关重要。关于数据湖的定义,存在多种解释。

维基百科指出,数据湖是一种系统或存储仓库,用于以自然或原始格式存储数据,通常是对象块或文件。这包括原始系统生成的原始数据拷贝以及为各种任务转换而生成的数据,如关系数据库中的结构化数据(行和列)、半结构化数据(如CSV、日志、XML、JSON)、非结构化数据(如电子邮件、文档、PDF等)和二进制数据(如图像、音频、视频)。

AWS定义数据湖为一个集中式的存储库,允许以任意规模存储所有结构化和非结构化数据。

微软的定义较为模糊,并未直接定义数据湖,而是通过描述其功能来定义。数据湖包括所有使得开发者、数据科学家、分析师能够更简单地存储、处理数据的能力。这些能力使得用户能够存储任意规模、任意类型、任意生成速度的数据,并跨平台、跨语言进行各种类型的分析和处理。

关于数据湖的定义虽然众多,但基本上都围绕以下几个特性展开:

  1. 数据湖需要提供足够的数据存储能力,保存一个企业/组织的所有数据。
  2. 数据湖可以存储海量的任意类型的数据,包括结构化、半结构化和非结构化数据。
  3. 数据湖中的数据是原始数据,是业务数据的完整副本,保持了它们在业务系统中的原始状态。
  4. 数据湖需要具备完善的数据管理能力(完善的元数据),可以管理数据源、数据格式、连接信息、数据schema、权限管理等要素。
  5. 数据湖需要具备多样化的分析能力,包括但不限于批处理、流式计算、交互式分析以及机器学习,同时需要提供任务调度和管理能力。
  6. 数据湖需要具备完善的数据生命周期管理能力,不仅存储原始数据,还能保存各种分析处理的中间结果,并完整记录数据的分析处理过程,帮助用户追溯任意一条数据的产生过程。
  7. 数据湖需要具备完善的数据获取和数据发布能力,支持各种数据源,获取全量/增量数据,并规范存储,推送分析处理结果到合适的存储引擎,满足不同的应用访问需求。
  8. 对于大数据的支持,包括超大规模存储以及可扩展的大规模数据处理能力。

综上所述,个人认为数据湖应该是一种不断演进、可扩展的大数据存储、处理、分析的基础设施,以数据为导向,实现任意来源、任意速度、任意规模、任意类型数据的全量获取、全量存储、多模式处理与全生命周期管理,并通过与各类外部异构数据源的交互集成,支持各类企业级应用。

数据湖调研1、Iceberg

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

实时方案之数据湖探究调研笔记

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

  • ACID事务
  • 时间旅行(time travel),以访问之前版本的数据
  • 完备的自定义类型、分区方式和操作的抽象
  • 列和分区方式可以进化,而且进化对用户无感,即无需重新组织或变更数据文件
  • 隐式分区,使SQL不用针对分区方式特殊优化
  • 面向云存储的优化等

Iceberg的架构和实现并未绑定于某一特定引擎,它实现了通用的数据组织格式,利用此格式可以方便地与不同引擎(如Flink、Hive、Spark)对接。因此,Iceberg的架构更加优雅,对于数据格式、类型系统有完备的定义和可进化的设计。

但是,Iceberg缺少行级更新、删除能力,这两大能力是现有数据组织最大的卖点,社区仍在优化中。

2、Hudi

Hudi通常用来将大量数据存储到HDFS/S3,新数据增量写入,而旧数据鲜有改动,特别是在经过数据清洗后放入数据仓库的场景。

在数据仓库如Hive中,对于update的支持非常有限,计算昂贵。

另一方面,若是有仅对某段时间内新增数据进行分析的场景,则Hive、Presto、HBase等也未提供原生方式,而是需要根据时间戳进行过滤分析。

Apache Hudi代表Hadoop Upserts and Incrementals,能够使HDFS数据集在分钟级的时延内支持变更,也支持下游系统对这个数据集的增量处理。

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

实时方案之数据湖探究调研笔记

PicWish
PicWish

推荐!专业的AI抠图修图,支持格式转化

下载

Hudi存储的架构如下图所示:

实时方案之数据湖探究调研笔记

如上图,最下面有一个时间轴,这是Hudi的核心。Hudi会维护一个时间轴,在每次执行操作时(如写入、删除、合并等),均会带有一个时间戳。通过时间轴,可以实现仅查询某个时间点之后成功提交的数据,或是仅查询某个时间点之前的数据。这样可以避免扫描更大的时间范围,并非常高效地只消费更改过的文件(例如在某个时间点提交了更改操作后,仅query某个时间点之前的数据,则仍可以query修改前的数据)。

如上图的左边,Hudi将数据集组织到与Hive表非常相似的基本路径下的目录结构中。数据集分为多个分区,每个分区均由相对于基本路径的分区路径唯一标识。

如上图的中间部分,Hudi以两种不同的存储格式存储所有摄取的数据:

  • 读优化的列存格式(ROFormat):仅使用列式文件(parquet)存储数据。在写入/更新数据时,直接同步合并原文件,生成新版本的基文件(需要重写整个列数据文件,即使只有一个字节的新数据被提交)。此存储类型下,写入数据非常昂贵,而读取的成本没有增加,所以适合频繁读的工作负载,因为数据集的最新版本在列式文件中始终可用,以进行高效的查询。
  • 写优化的行存格式(WOFormat):使用列式(parquet)与行式(avro)文件组合,进行数据存储。在更新记录时,更新到增量文件中(avro),然后进行异步(或同步)的compaction,创建列式文件(parquet)的新版本。此存储类型适合频繁写的工作负载,因为新记录是以appending的模式写入增量文件中。但是在读取数据集时,需要将增量文件与旧文件进行合并,生成列式文件。

3、DeltaLake

传统的lambda架构需要同时维护批处理和流处理两套系统,资源消耗大,维护复杂。基于Hive的数仓或者传统的文件存储格式(比如parquet/ORC),都存在一些难以解决的问题:

  • 小文件问题
  • 并发读写问题
  • 有限的更新支持
  • 海量元数据(例如分区)导致metastore不堪重负

实时方案之数据湖探究调研笔记

如上图,Delta Lake是Spark计算框架和存储系统之间带有Schema信息的存储中间层。它有一些重要的特性:

  • 设计了基于HDFS存储的元数据系统,解决metastore不堪重负的问题;
  • 支持更多种类的更新模式,比如Merge/Update/Delete等操作,配合流式写入或者读取的支持,让实时数据湖变得水到渠成;
  • 流批操作可以共享同一张表;
  • 版本概念,可以随时回溯,避免一次误操作或者代码逻辑而无法恢复的灾难性后果。

Delta Lake是基于Parquet的存储层,所有的数据都是使用Parquet来存储,能够利用parquet原生高效的压缩和编码方案。

Delta Lake在多并发写入之间提供ACID事务保证。每次写入都是一个事务,并且在事务日志中记录了写入的序列顺序。事务日志跟踪文件级别的写入并使用乐观并发控制,这非常适合数据湖,因为多次写入/修改相同的文件很少发生。在存在冲突的情况下,Delta Lake会抛出并发修改异常以便用户能够处理它们并重试其作业。

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

4、数据湖技术比较

实时方案之数据湖探究调研笔记实时方案之数据湖探究调研笔记

总结

实时方案之数据湖探究调研笔记实时方案之数据湖探究调研笔记

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

678

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

346

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1095

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

357

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

675

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

573

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

415

2024.04.29

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

3

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.2万人学习

Django 教程
Django 教程

共28课时 | 3.1万人学习

Excel 教程
Excel 教程

共162课时 | 11.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号