数据湖:iceberg概念及回顾什么是数据湖

Lansonli Lansonli     2022-11-29     632

关键词:

Iceberg概念及回顾什么是数据湖

一、回顾什么是数据湖

数据湖是一个集中式的存储库,允许你以任意规模存储多个来源、所有结构化和非结构化数据,可以按照原样存储数据,无需对数据进行结构化处理,并运行不同类型的分析,对数据进行加工,例如:大数据处理、实时分析、机器学习,以指导做出更好地决策。

二、大数据为什么需要数据湖

当前基于Hive的离线数据仓库已经非常成熟,在传统的离线数据仓库中对记录级别的数据进行更新是非常麻烦的,需要对待更新的数据所属的整个分区,甚至是整个表进行全面覆盖才行,由于离线数仓多级逐层加工的架构设计,数据更新时也需要从贴源层开始逐层反应到后续的派生表中去。

随着实时计算引擎的不断发展以及业务对于实时报表的产出需求不断膨胀,业界最近几年就一直聚焦并探索于实时数仓建设。根据数仓架构演变过程,在Lambda架构中含有离线处理与实时处理两条链路,其架构图如下:

数据湖(七):Iceberg概念及回顾什么是数据湖_sql数据湖(七):Iceberg概念及回顾什么是数据湖_数据_02​编辑

正是由于两条链路处理数据导致数据不一致等一些列问题所以才有了Kappa架构,Kappa架构如下: 

数据湖(七):Iceberg概念及回顾什么是数据湖_kafka_03数据湖(七):Iceberg概念及回顾什么是数据湖_数据_04​编辑

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通过表元数据来对查询进行高效过滤。
  • 基于乐观锁的并发支持,提供多线程并发写入能力并保证数据线性一致。

flink+iceberg+对象存储,构建数据湖方案

...上海站FlinkMeetup分享内容,如何基于Flink、对象存储、Iceberg来构建数据湖生态。本文整理自Dell科技集团高级软件研发经理孙伟在4月17日上海站FlinkMeetup分享的《Iceberg和对象存储构建数据湖方案》,文章内容为:数据湖... 查看详情

“数据湖三剑客”hudi、deltalake和iceberg深度对比

...的数据湖有江湖人称“数据湖三剑客”的Hudi、DeltaLake和IcebergIceberg官网定义:Iceberg是一个通用的表格式(数据组织格式),提供高性能的读写和元数据管理功能。Iceberg的ACID能力可以简化整个流水线的设计,传统Hive/Spark在修正... 查看详情

数据湖:iceberg特点详述和数据类型

文章目录Iceberg特点详述和数据类型一、Iceberg特点详述1、Iceberg分区与隐藏分区(HiddenPartition)2、​​​​​​​Iceberg表演化(TableEvolution)3、​​​​​​​​​​​​​​模式演化(SchemaEvolution)4、... 查看详情

数据湖(十六):structuredstreaming实时写入iceberg

 StructuredStreaming实时写入Iceberg目前Spark中StructuredStreaming只支持实时向Iceberg中写入数据,不支持实时从Iceberg中读取数据,下面案例我们将使用StructuredStreaming从Kafka中实时读取数据,然后将结果实时写入到Iceberg中。一、创建Kafk... 查看详情

数据湖(十四):spark与iceberg整合查询操作

Spark与Iceberg整合查询操作一、DataFrameAPI加载Iceberg中的数据Spark操作Iceberg不仅可以使用SQL方式查询Iceberg中的数据,还可以使用DataFrame方式加载Iceberg表中的数据,可以通过spark.table(Iceberg表名)或者spark.read.format("iceberg").load("icebergdata... 查看详情

数据湖:hive与iceberg整合(代码片段)

文章目录Hive与Iceberg整合一、开启Hive支持Iceberg1、下载iceberg-hive-runtime.jar2、配置hive-site.xml二、​​​​​​​​​​​​​​Hive中操作Iceberg格式表1、如果没有设置iceberg.catalog属性,默认使用HiveCatalog来加载2、如果设置了ice... 查看详情

2天,撸完flink+hudi+iceberg数据湖落地系统,爽!

数仓技术应对关系型结构化数据游刃有余,但对于多元异构数据,却爱莫能助。最近行业大佬都在聊怎么部署数据湖,这波操作未来走向如何?数据湖技术能够实现全量数据的单一存储,通常存储原始格式的... 查看详情

数据湖(十四):spark与iceberg整合查询操作(代码片段)

文章目录Spark与Iceberg整合查询操作一、DataFrameAPI加载Iceberg中的数据二、查询表快照三、查询表历史 四、​​​​​​​​​​​​​​查询表datafiles五、​​​​​​​​​​​​​​查询Manifests六、​​​​​​​​​​​... 查看详情

数据湖(十五):spark与iceberg整合写操作

Spark与Iceberg整合写操作一、INSERTINTO"insertinto"是向Iceberg表中插入数据,有两种语法形式:"INSERTINTOtblVALUES(1,"zs",18),(2,"ls",19)"、"INSERTINTOtblSELECT...",以上两种方式比较简单,这里不再详细记录。二、MERGEINTOIceberg"mergeinto"语法可以对... 查看详情

flink+iceberg,百亿级实时数据入湖实战

摘要:本文整理自腾讯数据湖研发高级工程师陈俊杰在4月17日上海站FlinkMeetup分享的《百亿级实时数据入湖实战》。内容包括:腾讯数据湖介绍百亿级数据场景落地未来规划总结Tips:点击文末「阅读原文」即可查看更... 查看详情

数据湖:iceberg表数据组织与查询

Iceberg表数据组织与查询一、下载avro-toolsjar包由于后期需要查看avro文件内容,我们可以通过avro-tool.jar来查看avro数据内容。可以在以下网站中下载avro-tools对应的jar包,下载之后上传到node5节点上:​​https://mvnrepository.com/artifact/or... 查看详情

flink+iceberg,腾讯百亿级实时数据入湖实战

简介:上海站FlinkMeetup分享内容,腾讯数据湖的百亿级数据场景落地的案例分享。本文整理自腾讯数据湖研发高级工程师陈俊杰在4月17日上海站FlinkMeetup分享的《百亿级实时数据入湖实战》,文章内容为:腾讯数据... 查看详情

数据湖(十七):flink与iceberg整合datastreamapi操作

Flink与Iceberg整合DataStreamAPI操作目前Flink支持使用DataStreamAPI和SQLAPI方式实时读取和写入Iceberg表,建议大家使用SQLAPI方式实时读取和写入Iceberg表。Iceberg支持的Flink版本为1.11.x版本以上,目前经过测试Iceberg版本与Flink的版本对应关系... 查看详情

数据湖(十七):flink与iceberg整合datastreamapi操作(代码片段)

文章目录Flink与Iceberg整合DataStreamAPI操作一、DataStreamAPI实时写入Iceberg表1、首先在Maven中导入以下依赖2、编写代码使用DataStreamAPI将Kafka数据写入到Iceberg表3、在Kafka中创建代码中指定的“flink-iceberg-topic”并启动代码生产数据4、通... 查看详情

数据湖(十三):spark与iceberg整合ddl操作

 Spark与Iceberg整合DDL操作这里使用HadoopCatalog来演示Spark与Iceberg的DDL操作。一、CREATETABLE创建表Createtable创建Iceberg表,创建表不仅可以创建普通表还可以创建分区表,再向分区表中插入一批数据时,必须对数据中分区列进行排序... 查看详情

数据湖(十五):spark与iceberg整合写操作(代码片段)

文章目录Spark与Iceberg整合写操作一、​​​​​​​INSERTINTO二、MERGEINTO1、首先创建a表和b表,并插入数据2、使用MERGEINTO语法向目标表更新、删除、新增数据3、​​​​​​​​​​​​​​INSERTOVERWRITE四、DELETEFROM五、​​... 查看详情

数据湖(二十):flink兼容iceberg目前不足和iceberg与hudi对比

Flink兼容Iceberg目前不足和Iceberg与Hudi对比一、Flink兼容Iceberg目前不足Iceberg目前不支持FlinkSQL查询表的元数据信息,需要使用JavaAPI实现。Flink不支持创建带有隐藏分区的Iceberg表Flink不支持带有WaterMark的Iceberg表Flink不支持添加列、删... 查看详情

数据湖(十三):spark与iceberg整合ddl操作(代码片段)

文章目录Spark与Iceberg整合DDL操作一、​​​​​​​CREATETABLE创建表二、​​​​​​​​​​​​​​CREATETAEBL... ASSELECT1、创建表hadoop_prod.default.mytbl,并插入数据2、使用“createtable...asselect”语法创建表mytal2并查询 三、REPLACETA... 查看详情