摘要:湖仓一体架构是一种新兴的数据管理方式,它融合了数据湖和数据仓库的优势,提供了统一的数据存储、事务支持、数据治理、实时与批处理能力以及弹性和可扩展性。在开源领域,湖仓一体技术栈的选择非常关键,因为它直接影响到系统的灵活性、扩展性和成本效益。以下是一篇关于湖仓一体开源技术栈的文章。
数据湖仓VS数据湖VS数据仓库的区别
数据湖仓开源技术栈
01
—
数据湖仓VS数据湖VS数据仓库的区别
传统数据仓库通常将计算与存储紧密结合,这种设计在扩展性方面存在局限。而现代云数据仓库技术打破了这一限制,实现了计算与存储的真正分离,使得两者能够根据需求独立扩展,优化了资源利用和成本效率。数据湖仓架构进一步推动了这一趋势,其设计哲学从一开始就包含了对计算和存储分离的原生支持。
在处理数据类型方面,传统数据仓库专为结构化和半结构化数据而设计,它们通常需要额外的功能或方法来处理开放数据文件和格式。数据湖仓则在设计上就考虑到了对各种数据类型的广泛支持,包括结构化、半结构化以及非结构化数据,其内部文件多采用开放格式,增强了数据的通用性和可移植性。
对于查询引擎的依赖性,传统数据仓库常常与特定厂商的查询技术绑定,限制了用户在查询解决方案上的自由度。数据湖仓架构则提供了更大的灵活性,允许用户基于不同的需求选择和切换多种查询引擎,从而为数据的分析和处理提供了多样化的选择。
注:本图来源于《【IBM】可信赖的企业级生成式人工智能白皮书》
02
—
数据湖仓的开源技术栈
数据湖仓开源技术栈从数据存储、数据管理,数据查询和处理3层进行说明。
数据存储
对象存储服务、块存储服务和⽂件存储服务是云计算和分布式存储中常⻅的三种存储模型。
对象存储服务
对象存储是一种数据存储架构,它以对象为单位来处理、存储和检索数据。与传统的文件存储和块存储不同,对象存储将数据作为对象进行管理,每个对象通常包含数据本身、元数据以及一个唯一的标识符。
对象存储适用于存储大量非结构化数据,例如图片、视频、音频、日志文件等静态文件,尤其适合于需要无限扩展的场景,如大数据应用、云存储服务、备份与归档等。
开源的对象存储解决方案包括:
1、Ceph:Ceph 是一个统一的分布式存储系统,设计用于提供高性能、可靠性和可扩展性的对象、块和文件存储。
2、MinIO:MinIO 是一个基于Apache License V2.0开源协议的对象存储服务,它兼容亚马逊S3云存储服务,适合存储大容量非结构化数据,如图片、视频、日志文件等。
3、GlusterFS:GlusterFS 是一个成熟的分布式文件系统,由原班人马开发的另一个存储系统是MINIO,但GlusterFS 本身也支持对象存储功能。
4、OpenIO:OpenIO 是一种开源对象存储解决方案,用于管理和保护大量非结构化数据,具有弹性和安全性。
5、Apache Ozone:Ozone 是 Hadoop 的可扩展、冗余和分布式对象存储,可以在容器环境中有效工作,支持多协议,如S3和Hadoop文件系统API 。
块存储服务
块存储服务将数据划分为固定⼤⼩的块,并将这些块存储在独⽴的设备上,每个块都有唯⼀的地址,允许直接读写单个块。
由于块存储提供了低延迟、⾼性能和随机访问的优势,因此它特别适⽤于对存储性能有较⾼要求的应⽤场景,⽐如数据库存储,虚拟机镜像存储等,这些特点也使其成为许多企业应⽤的⾸选存储模型。
开源的块存储解决方案包括:
1、Ceph: Ceph 是一个统一的分布式存储系统,提供高性能、可靠性和可扩展性的对象、块和文件存储。Ceph 特别适用于OpenStack环境,并且是许多云服务提供商的选择。
2、Sheepdog: Sheepdog 是一个分布式块存储系统,设计简单且易于维护。它提供了一些 Ceph 不支持的特性,比如多磁盘支持和集群范围的快照功能。
⽂件存储服务
⽂件存储服务为⽤⼾提供了类似传统⽂件系统的层次结构,以⽂件和⽬录的形式组织数据,并通过⽹络协议(如 NFS、SMB)提供对这些⽂件的访问。
由于⽂件存储允许多个⽤⼾或设备同时访问相同的⽂件,⽀持⽂件的共享和协作, 因此它⾮常适⽤于需要共享数据和⽀持多⽤⼾协同访问的场景,如企业共享⽂件、应⽤程序配置⽂件等。
1、HDFS是Apache Hadoop项目的一部分,专为大数据处理而设计。它是一个高度可靠的存储系统,适合部署在普通的硬件上,并且具备高吞吐量的数据访问能力。HDFS特别适合存储大规模数据集,并支持大文件的存储和处理。
2、GFS是Google开发的一个可扩展的分布式文件系统,用于支持其大规模的数据密集型应用。GFS特别优化了对大型文件的存储和访问,以及顺序读写操作。
3、Ceph是一个开源的分布式存储系统,提供了高性能、可靠性和可扩展性的对象、块和文件存储。Ceph的设计目标是易于管理,同时提供强大的数据保护能力。
数据格式
在大数据存储中,不同的文件格式有着不同的特点和优化方向,适用于不同的应用场景。以下是二进制格式、Parquet、Avro和ORC这四种文件格式的简要介绍和它们的主要应用场景的区别:
二进制格式
定义: 二进制文件通常是指数据以二进制形式存储的文件,这种格式通常不是自描述的,需要特定的程序来解析。
应用场景: 适用于需要高效率读写和存储原始数据的场景,如某些特定的应用程序或系统间的数据传输。
Parquet
定义: Parquet是一个列存储的文件格式,被设计为与Hadoop生态系统兼容,支持嵌套数据结构。
特点: 高效的压缩和编码技术,优化了对列的访问。
应用场景: 适用于需要高效读写大量列式数据的场景,特别是使用Spark或Hive进行数据分析和处理时。
Parquet 的优点包括:
• 列裁剪:只读取需要的列,实现⾼效的列扫描,减少 IO 操作;
• 谓词下推:因为 Parquet 中记录了每⼀个 Row group 的列统计信息,包括数值列
的 max/min,字符串列的枚举值信息。这样可以从源头过滤掉不符合条件的数据,只读取需要的数据,进⼀步减少 IO 操作。
• 更⾼效的压缩与编码:因为同⼀列的数据类型相同,所以可以针对不同列使⽤更合适的压缩与编码⽅式,降低磁盘存储空间。
Avro
定义: Avro是Apache Hadoop项目的一部分,是一个数据序列化框架,提供了丰富的数据结构和紧凑的二进制格式。
特点: 支持数据的自描述性,可以自动处理数据的序列化和反序列化。
应用场景: 适用于需要跨语言操作数据的场景,以及在Hadoop生态系统中进行数据交换和存储。
Avro 的优点包括:
• ⽀持模式演进。 它可以处理类似缺少字段、添加字段和更改字段等的模式更改。
• ⽀持跨编程语⾔实现。
• ⽀持复杂的数据结构,如数组(arrays),枚举类型(enums),maps 和unions。
ORC (Optimized Row Columnar)
定义: ORC是一个高效的列存储和压缩文件格式,专为Hadoop、Hive和Spark设计。
特点: 优化了读写性能,支持复杂的嵌套数据类型,提供了多种压缩和编码选项。
应用场景: 适用于需要高效存储和查询大数据集的场景,特别是使用Hive或Spark SQL进行交互式查询时。
OCR 的优点包括:
• 有多种⽂件压缩⽅式,并且有着很⾼的压缩⽐。
• 提供了多种索引,row、group、index、bloom、filter、index。
• ⽀持复杂的数据结构。
• ⽀持事务 ACID。
• ⽀持谓词下推。
应用场景区别
二进制格式: 更多用于系统级的数据存储和传输例如常见的关系型数据库,不是为大数据平台特别优化的。
Parquet: 由于其列存储特性,非常适合于分析型应用,特别是当查询涉及到大量列的选择和过滤操作时。
Avro: 适合于需要跨不同系统和语言进行数据交换的场景,特别是在数据序列化和反序列化方面需要灵活性时。
ORC: 由于其优化的读写性能,非常适合于需要快速查询响应的交互式数据分析环境。
大数据平台多采用Parquet、Avro、ORC 三种存储格式。在选择文件格式时,需要考虑数据的使用模式、查询的类型、系统的兼容性以及开发和维护的成本。每种格式都有其优势和局限性,选择最合适的格式可以显著提高数据处理的效率和性能。
而这三种文件存储格式并不能直接进行数据展示和读取,需要一个表格式工具对数据集文件进行管理和以“表“的形式进行展示。
Table Format 是表的抽象,将数据集⽂件组合起来,以单个“表”的形式呈现,允许⼈和⼯具与表数据⾼效交互,它本⾝并不存储数据,只是定义了表的元数据信息以及数据⽂件的组织形式、统计信息以及上层引擎读取和写⼊的相关 API。
开放式表格式提供了额外的类数据库功能,简化了数据湖的优化和管理开销。这些功能包括 :
• ACID 事务:保证操作的原⼦性,保证数据的⼀致性
• 记录级别的操作:允许单个⾏的插⼊、更新或删除
• 索引:提⾼性能,如分区技术
• 并发控制:允许多个进程同时读写相同的数据
• 模式演化:允许在表的⽣命周期内添加或修改表的列
• 时间旅⾏:让您能够查询过去某个时间点的数据
目前三种主流的表格式:Iceberg、Hudi、Delta Lake是这三种开源的技术,相关的功能对比可以参考文章《管理引擎如何实现数据湖的ACID特性》
元数据管理
数据湖仓(Lakehouse)的元数据管理是指在数据湖的基础上增加数据仓库的管理特性,特别是对数据的元数据进行组织、存储、检索和维护的过程。元数据是描述数据的"数据",它可以包括数据的来源、结构、质量、存储位置、访问权限等信息。
Apache Hive中的Hive Metastore(HMS)是一个关键组件,它负责存储和管理元数据。元数据描述了数据的特征,如表的名称、类型和存储位置等。当创建一个表时,表的数据存储在文件系统中,而其元数据则存储在Hive Metastore中。Hive Metastore通常将这些元数据存储在关联的关系型数据库中,例如MySQL或PostgreSQL。自Hive 3.0起,Hive Metastore已经完全独立,可以单独运行,不依赖于Hive的其他组件,也可以被其他第三方服务作为元数据服务使用。
Hive Metastore的作用类似于图书管理员,它详细记录了书籍的名称、目录和存放位置等信息。当用户需要查询书籍时,图书管理员能够迅速提供所需的详细信息。Hive Metastore的主要作用之一是帮助计算引擎快速定位并访问存储在分布式文件系统中的数据。通过元数据,计算引擎可以确定如何解析数据、执行授权检查以及高效地处理用户查询。
Hive Metastore的元数据对于数据湖中的数据至关重要,因此必须确保其持久性、高可用性,并具备灾难恢复的能力。Hive Metastore的功能架构可以参考Hive的官方文档。其主要功能包括元数据的存储、管理和查询优化。
数据治理和数据权限:
数据湖仓的数据治理和数据权限功能是确保数据在整个生命周期中得到有效管理、保护和利用的一系列措施和工具。具体来说,数据治理通常包括数据的质量保证、数据的血缘追踪、数据的分类和分级、以及数据的合规性管理。而数据权限功能则涉及到对数据的访问控制,确保只有授权用户才能访问特定数据,以保护数据的安全性和隐私性。
以下是常见的开源框架Range、Atlas、DataHub的情况:
1、Apache Atlas :
Apache Atlas 是一个提供数据治理和元数据管理框架的开源项目,它是Hadoop生态系统的一部分。
Atlas 支持对各种Hadoop和非Hadoop元数据类型的管理,并且提供了丰富的REST API进行集成。
它能够实现数据血缘的追溯到字段级别,并对权限有很好的控制。
Atlas 使用Hbase存储元数据,Solr实现索引,还包括Ingest/Export组件、类型系统、图形引擎等核心机制。
2、Range
Range 通常指的是Apache Ranger,它是一个数据权限管理和数据访问控制的框架。
Ranger 提供了细粒度的访问控制,支持角色基于的访问控制,并能够与多种数据源集成。
它能够记录和监控数据访问活动,生成访问审计报告,帮助企业满足合规性要求。
3、DataHub:
DataHub 是LinkedIn开源的元数据搜索和发现工具,后继发展为一个全面的元数据平台。
DataHub 提供了端到端的数据发现、数据可观察性和数据治理功能。
它支持实时的元数据捕捉框架,可以实时感应元数据的变化,并支持标签、术语表、业务域等元数据的管理。
DataHub 还提供了丰富的权限支持,并且具有跨数据库、数据仓库、数据湖、数据可视化工具的搜索与发现功能。
这些框架各有特点,用户可以根据自己的需求选择合适的框架进行数据治理和权限管理。例如,如果用户主要关注Hadoop生态系统中的数据治理,可能会选择Apache Atlas;如果需要一个更广泛的数据访问控制和权限管理解决方案,可能会选择Apache Ranger;而如果用户需要一个现代的数据栈元数据平台,可能会选择DataHub。
向量数据库
向量数据库的主要作用是存储、索引和搜索高维向量数据,这些向量通常用于表示各种类型的非结构化数据,如图像、视频、音频和文本等。它们在机器学习和人工智能领域中尤为重要,因为这些领域经常需要处理和分析大量的高维数据。以下是向量数据库的一些关键作用和应用场景:
向量数据库的作用:
1、高效的相似性搜索:向量数据库能够快速检索与查询向量最相似的向量。
2、高维数据索引:它们使用特定的数据结构来组织高维空间中的数据点,以实现快速访问。
3、支持机器学习和深度学习:向量数据库经常与机器学习模型配合使用,用于存储和检索模型生成的嵌入向量。
4、多模态数据处理:能够处理和关联来自不同数据源(如图像、文本和声音)的数据。
应用场景:
1、推荐系统:通过分析用户行为和偏好,提供个性化推荐。
2、图像和视频检索:通过视觉特征的向量化,实现快速的图像和视频搜索。
3、自然语言处理:在文本分析和语义搜索中使用文本向量。
4、生物信息学:用于基因序列分析和蛋白质结构预测。
5、社交媒体分析:分析社交媒体数据,识别模式和趋势。
6、实时监控和欺诈检测:实时分析数据流,检测异常行为。
开源向量数据库的特性:
Milvus:
提供高效的向量检索能力,适合机器学习和人工智能领域。
支持多种索引类型,如倒排索引、HNSW、IVF等。
支持多种相似度度量方法,包括欧氏距离和余弦相似度。
可扩展性强,支持云环境部署,具有云原生支持。
提供多种语言的SDK,易于集成和使用。
Chroma:
优化了查询处理过程,支持实时数据查询和更新。
适合在Jupyter Notebook上进行开发、测试和生产。
特别适合处理多媒体内容,如音频和视频搜索。
Weaviate:
使用图数据结构来组织数据,支持向量索引和近似最近邻搜索。
集成了机器学习模型,如Transformer,用于自动向量化。
架构模块化,可扩展,支持自定义模块。
提供RESTful API和GraphQL接口,以及多种客户端库。
这些特性使得Milvus、Chroma和Weaviate在处理大规模、高维度的数据集时表现出色,能够满足不同应用场景的需求。
图数据库
图数据库的主要作用是存储和查询以图结构组织的数据,它特别擅长处理和分析复杂的关系网络。以下是图数据库的一些关键作用和主要应用场景:
图数据库的作用:
处理复杂关系:图数据库能够高效地处理和查询高度连接的数据和复杂的关系网络。
深度关系查询:图数据库能够快速进行深度关系查询,找出多跳关系。
模式识别:图数据库适用于识别社交网络、推荐系统等场景中的模式和社区。
实时数据处理:许多图数据库支持实时数据的插入、更新和查询。
路径搜索和分析:图数据库能够快速找到图中的最短路径、循环等。
主要应用场景:
社交网络分析:分析用户关系、社交圈、影响力分析等。
推荐系统:基于用户行为和偏好提供个性化推荐。
欺诈检测:在金融领域,用于检测信用卡欺诈、保险欺诈等。
知识图谱:构建和查询大规模的知识图谱,用于问答系统、智能助手等。
网络安全:用于网络安全威胁分析、攻击模式识别等。
供应链管理:追踪产品流向、管理复杂的供应链网络。
开源图数据库的特点:
Neo4j:
是一个原生图数据库,专为图数据的存储和查询进行了优化。
支持“无索引邻接(index-free adjacency)”特性,提供快速的关系查询。
提供Cypher查询语言,专门用于图数据的查询。
JanusGraph:
是一个可扩展的分布式图数据库,可以与多种存储后端(如Apache Cassandra、HBase等)集成。
支持Apache TinkerPop图计算框架,允许进行复杂的图算法计算。
提供对多种索引后端的支持,如Elasticsearch、Solr等。
TuGraph:
是一个分布式图数据库,由蚂蚁金服开发。
支持PB级别的大规模图数据处理。
提供了对Gremlin查询语言的支持。
ByteGraph:
由字节跳动开发的分布式图数据库。
专为处理大规模图数据而设计,支持高并发访问和水平扩展。
支持多种图算法,适用于复杂的图分析场景。
这些图数据库各有特点,用户可以根据自己的需求选择合适的图数据库进行开发和部署。
OLAP分析引擎
OLAP(在线分析处理)分析引擎是一种数据库管理系统,它专门设计用于快速响应多维数据的复杂查询、聚合和分析操作。OLAP引擎通常用于数据仓库系统,支持业务分析、决策支持系统和数据挖掘活动。
OLAP分析引擎的关键特性:
1、多维数据模型:OLAP引擎使用多维数据模型(如星型模型或雪花模型)来组织数据,使得数据可以按照不同的维度和层次结构进行分析。
2、预聚合技术:通过预计算和存储汇总数据,OLAP引擎能够快速响应汇总查询。
3、快速查询性能:OLAP引擎优化了读取操作,可以快速执行数据的切片、切块(slice-and-dice)和其他多维分析操作。
4、数据立方体:支持数据立方体操作,允许用户从不同角度查看和分析数据。
5、下钻和上卷:允许用户深入查看详细数据(下钻)或查看汇总数据(上卷)。
6、并行处理:现代OLAP引擎支持并行处理,以提高查询性能和缩短响应时间。
开源的OLAP分析引擎的对比分析可以参见文章《常见OLAP分析引擎的对比分析》
数据处理引擎
数据处理引擎在大数据开发中扮演着核心角色,它们主要用于执行批处理(批量数据处理)和流处理(实时数据流处理)。以下是数据处理引擎的主要作用和应用场景:
主要作用:
1、批处理:处理存储在文件系统或数据库中的静态数据集,通常用于不需要即时结果的数据分析任务。
2、流处理:处理实时生成的数据流,如日志文件更新、传感器数据、社交媒体活动等,通常需要快速响应。
3、数据转换:将数据从一种格式转换为另一种格式,或将数据从一个系统迁移到另一个系统。
4、数据聚合:对数据进行汇总和聚合操作,以生成报告或仪表板。
5、数据清洗:识别和纠正(或删除)数据中的错误,提高数据质量。
6、机器学习:训练模型和进行预测分析。
常见的流批引擎是spark和flink引擎,相关特性分析对比参考文章《Flink流批一体引擎:曾经火爆一时,现在是否能够真正取代Spark引擎?》
数据联邦查询引擎
联邦查询引擎(Federated Query Engine)是一种特殊的数据库查询引擎,它能够跨越多个不同的数据源执行查询,而无需将数据物理地集中存储在一个地方。这种引擎通过定义数据源之间的逻辑关系,允许用户像操作单一数据库一样,执行跨数据源的查询。
主要作用:
1、跨数据源查询:允许用户编写单一查询,同时搜索多个异构数据源。
2、数据虚拟化:提供一个虚拟的数据层,隐藏了底层数据源的复杂性。
3、避免数据迁移:不需要将数据从一个系统迁移到另一个系统,减少了数据迁移的成本和风险。
4、统一数据访问:为不同的数据源提供一个统一的访问接口或API。
5、提高查询效率:通过优化查询计划,减少数据传输和处理时间。
6、数据隐私和安全:可以控制对不同数据源的访问权限,增强数据安全性。
以上就是数据湖仓的开源技术栈,文中所述都是常见的技术框架,可以根据实际需求进行技术选型。