数据湖(七):Iceberg 概念及回顾什么是数据湖
Iceberg 概念及回顾什么是数据湖
一、回顾什么是数据湖
数据湖是一个集中式的存储库,允许你以任意规模存储多个来源、所有结构化和非结构化数据,可以按照原样存储数据,无需对数据进行结构化处理,并运行不同类型的分析,对数据进行加工,例如:大数据处理、实时分析、机器学习,以指导做出更好地决策。
二、大数据为什么需要数据湖
当前基于 Hive 的离线数据仓库已经非常成熟,在传统的离线数据仓库中对记录级别的数据进行更新是非常麻烦的,需要对待更新的数据所属的整个分区,甚至是整个表进行全面覆盖才行,由于离线数仓多级逐层加工的架构设计,数据更新时也需要从贴源层开始逐层反应到后续的派生表中去。
随着实时计算引擎的不断发展以及业务对于实时报表的产出需求不断膨胀,业界最近几年就一直聚焦并探索于实时数仓建设。根据数仓架构演变过程,在 Lambda 架构中含有离线处理与实时处理两条链路,其架构图如下:
正是由于两条链路处理数据导致数据不一致等一些列问题所以才有了 Kappa 架构,Kappa 架构如下:
Kappa 架构可以称为真正的实时数仓,目前在业界最常用实现就是 Flink + Kafka,然而基于 Kafka+Flink 的实时数仓方案也有几个非常明显的缺陷,所以在目前很多企业中实时数仓构建中经常使用混合架构,没有实现所有业务都采用 Kappa 架构中实时处理实现。Kappa 架构缺陷如下:
Kafka 无法支持海量数据存储。对于海量数据量的业务线来说,Kafka 一般只能存储非常短时间的数据,比如最近一周,甚至最近一天。
Kafka 无法支持高效的 OLAP 查询,大多数业务都希望能在 DWD\DWS 层支持即席查询的,但是 Kafka 无法非常友好地支持这样的需求。
无法复用目前已经非常成熟的基于离线数仓的数据血缘、数据质量管理体系。需要重新实现一套数据血缘、数据质量管理体系。
Kafka 不支持 update/upsert,目前 Kafka 仅支持 append。
为了解决 Kappa 架构的痛点问题,业界最主流是采用“批流一体”方式,这里批流一体可以理解为批和流使用 SQL 同一处理,也可以理解为处理框架的统一,例如:Spark、Flink,但这里更重要指的是存储层上的统一,只要存储层面上做到“批流一体”就可以解决以上 Kappa 遇到的各种问题。数据湖技术可以很好的实现存储层面上的“批流一体”,这就是为什么大数据中需要数据湖的原因。
三、Iceberg 概念及特点
1、概念
Apache Iceberg 是一种用于大型数据分析场景的开放表格式(Table Format)。Iceberg 使用一种类似于 SQL 表的高性能表格式,Iceberg 格式表单表可以存储数十 PB 数据,适配 Spark、Trino、PrestoDB、Flink 和 Hive 等计算引擎提供高性能的读写和元数据管理功能,Iceberg 是一种数据湖解决方案。
注意:Trino 就是原来的 PrestoSQL ,2020 年 12 月 27 日,PrestoSQL 项目更名为 Trino,Presto 分成两大分支:PrestoDB、PrestorSQL。
2、特点
Iceberg 非常轻量级,可以作为 lib 与 Spark、Flink 进行集成
Iceberg 官网:https://iceberg.apache.org/
Iceberg 具备以下特点:
Iceberg 支持实时/批量数据写入和读取,支持 Spark/Flink 计算引擎。
Iceberg 支持事务 ACID,支持添加、删除、更新数据。
不绑定任何底层存储,支持 Parquet、ORC、Avro 格式兼容行存储和列存储。
Iceberg 支持隐藏分区和分区变更,方便业务进行数据分区策略。
Iceberg 支持快照数据重复查询,具备版本回滚功能。
Iceberg 扫描计划很快,读取表或者查询文件可以不需要分布式 SQL 引擎。
Iceberg 通过表元数据来对查询进行高效过滤。
基于乐观锁的并发支持,提供多线程并发写入能力并保证数据线性一致。
版权声明: 本文为 InfoQ 作者【Lansonli】的原创文章。
原文链接:【http://xie.infoq.cn/article/4f8d48a57296c01986cf00bb3】。文章转载请联系作者。
评论