首页 > 其他分享 >数据湖Iceberg-简介(1)

数据湖Iceberg-简介(1)

时间:2023-05-06 15:31:40浏览次数:49  
标签:Evolution Iceberg 策略 演化 简介 分区 数据



文章目录

  • Iceberg简介
  • 概述
  • 特性
  • 数据存储、计算引擎插件化
  • 实时流批一体
  • 数据表演化(Table Evolution)
  • 模式演化(Schema Evolution)
  • 分区演化(Partition Evolution)
  • 列顺序演化(Sort Order Evolution)
  • 隐藏分区(Hidden Partition)
  • 镜像数据查询(Time Travel)
  • 支持事务(ACID)
  • 基于乐观锁的并发支持
  • 文件级数据剪裁
  • 其他数据湖框架的对比



数据湖Iceberg-简介(1)


数据湖Iceberg-存储结构(2)


数据湖Iceberg-Hive集成Iceberg(3)


数据湖Iceberg-SparkSQL集成(4)


数据湖Iceberg-FlinkSQL集成(5)


数据湖Iceberg-FlinkSQL-kafka类型表数据无法成功写入(6)


数据湖Iceberg-Flink DataFrame集成(7)

Iceberg简介

概述

为了解决数据存储和计算引擎之间的适配的问题,Netflix开发了Iceberg,2018年11月16日进入Apache孵化器,2020 年5月19日从孵化器毕业,成为Apache的顶级项目。

Iceberg是一个面向海量数据分析场景的开放表格式(Table Format)。表格式(Table Format)可以理解为元数据以及数据文件的一种组织方式,处于计算框架(Flink,Spark…)之下,数据文件之上。

特性

数据存储、计算引擎插件化

Iceberg提供一个开放通用的表格式(Table Format)实现方案,不和特定的数据存储、计算引擎绑定。目前大数据领域的常见数据存储(HDFS、S3…),计算引擎(Flink、Spark…)都可以接入Iceberg。

在生产环境中,可选择不同的组件搭使用。甚至可以不通过计算引擎,直接读取存在文件系统上的数据。

实时流批一体

Iceberg上游组件将数据写入完成后,下游组件及时可读,可查询。可以满足实时场景.并且Iceberg同时提供了流/批读接口、流/批写接口。可以在同一个流程里, 同时处理流数据和批数据,大大简化了ETL链路。

数据表演化(Table Evolution)

Iceberg可以通过SQL的方式进行表级别模式演进。进行这些操作的时候,代价极低。 不存在读出数据重新写入或者迁移数据这种费时费力的操作。

比如在常用的Hive中,如果我们需要把一个按天分区的表,改成按小时分区。此时,不能再原表之上直接修改,只能新建一个按小时分区的表,然后再把数据Insert到新的小时分区表。而且,即使我们通过Rename的命令把新表的名字改为原表,使用原表的上次层应用, 也可能由于分区字段修改,导致需要修改 SQL,这样花费的经历是非常繁琐的。

模式演化(Schema Evolution)

Iceberg支持下面几种模式演化:

  • ADD:向表或者嵌套结构增加新列
  • Drop:从表中或者嵌套结构中移除一列
  • Rename:重命名表中或者嵌套结构中的一列
  • Update:将复杂结构(struct, map<key, value>, list)中的基本类型扩展类型长度, 比如tinyint修改成int.
  • Reorder:改变列或者嵌套结构中字段的排列顺序

Iceberg保证模式演化(Schema Evolution)是没有副作用的独立操作流程, 一个元数据操作, 不会涉及到重写数据文件的过程。具体的如下:

  • 增加列时候,不会从另外一个列中读取已存在的的数据
  • 删除列或者嵌套结构中字段的时候,不会改变任何其他列的值
  • 更新列或者嵌套结构中字段的时候,不会改变任何其他列的值
  • 改变列列或者嵌套结构中字段顺序的时候,不会改变相关联的值

在表中Iceberg 使用唯一ID来定位每一列的信息。新增一个列的时候,会新分配给它一个唯一ID, 并且绝对不会使用已经被使用的ID。

使用名称或者位置信息来定位列的, 都会存在一些问题, 比如使用名称的话,名称可能会重复, 使用位置的话, 不能修改顺序并且废弃的字段也不能删除。

分区演化(Partition Evolution)

Iceberg可以在一个已存在的表上直接修改,因为Iceberg的查询流程并不和分区信息直接关联。

当我们改变一个表的分区策略时,对应修改分区之前的数据不会改变, 依然会采用老的分区策略,新的数据会采用新的分区策略,也就是说同一个表会有两种分区策略,旧数据采用旧分区策略,新数据采用新新分区策略, 在元数据里两个分区策略相互独立,不重合。

在查询数据的时候,如果存在跨分区策略的情况,则会解析成两个不同执行计划,如Iceberg官网提供图所示:

数据湖Iceberg-简介(1)_hadoop

图中booking_table表2008年按月分区,进入2009年后改为按天分区,这两中分区策略共存于该表中。

借助Iceberg的隐藏分区(Hidden Partition),在写SQL 查询的时候,不需要在SQL中特别指定分区过滤条件,Iceberg会自动分区,过滤掉不需要的数据。

Iceberg分区演化操作同样是一个元数据操作, 不会重写数据文件。

列顺序演化(Sort Order Evolution)

Iceberg可以在一个已经存在的表上修改排序策略。修改了排序策略之后, 旧数据依旧采用老排序策略不变。往Iceberg里写数据的计算引擎总是会选择最新的排序策略, 但是当排序的代价极其高昂的时候, 就不进行排序了。

隐藏分区(Hidden Partition)

Iceberg的分区信息并不需要人工维护, 它可以被隐藏起来. 不同其他类似Hive 的分区策略, Iceberg的分区字段/策略(通过某一个字段计算出来),可以不是表的字段和表数据存储目录也没有关系。在建表或者修改分区策略之后,新的数据会自动计算所属于的分区。在查询的时候同样不用关系表的分区是什么字段/策略,只需要关注业务逻辑,Iceberg会自动过滤不需要的分区数据。

正是由于Iceberg的分区信息和表数据存储目录是独立的,使得Iceberg的表分区可以被修改,而且不和涉及到数据迁移。

镜像数据查询(Time Travel)

Iceberg提供了查询表历史某一时间点数据镜像(snapshot)的能力。通过该特性可以将最新的SQL逻辑,应用到历史数据上。

支持事务(ACID)

Iceberg通过提供事务(ACID)的机制,使其具备了upsert的能力并且使得边写边读成为可能,从而数据可以更快的被下游组件消费。通过事务保证了下游组件只能消费已commit的数据,而不会读到部分甚至未提交的数据。

基于乐观锁的并发支持

Iceberg基于乐观锁提供了多个程序并发写入的能力并且保证数据线性一致。

文件级数据剪裁

Iceberg的元数据里面提供了每个数据文件的一些统计信息,比如最大值,最小值,Count计数等等。因此,查询SQL的过滤条件除了常规的分区,列过滤,甚至可以下推到文件级别,大大加快了查询效率。

其他数据湖框架的对比

数据湖Iceberg-简介(1)_字段_02

数据湖Iceberg-简介(1)_数据_03


标签:Evolution,Iceberg,策略,演化,简介,分区,数据
From: https://blog.51cto.com/u_13721902/6250226

相关文章

  • 数据湖Iceberg-FlinkSQL-kafka类型表数据无法成功写入(6)
    数据湖Iceberg-简介(1)数据湖Iceberg-存储结构(2)数据湖Iceberg-Hive集成Iceberg(3)数据湖Iceberg-SparkSQL集成(4)数据湖Iceberg-FlinkSQL集成(5)数据湖Iceberg-FlinkSQL-kafka类型表数据无法成功写入(6)数据湖Iceberg-FlinkDataFrame集成(7)数据湖Iceberg-FlinkSQL-kafka类型表......
  • R语言中cor函数应用与数据框
     R语言中cor函数应用与数据框,生成以列为基本单位的两两变量之间的相关的矩阵。 01、测试:a<-c(1,3,5,7,9)b<-c(3,8,7,12,23)c<-c(12,23,54,63,89)d<-c(23,45,68,87,234)dat<-data.frame(a,b,c,d)##测试数据dat 002、dattes......
  • 操作系统——简介
    操作系统操作系统是管理计算机硬件资源,控制其他程序运行并为用户提供交互操作界面的系统软件的集合。操作系统是计算机系统的关键组成部分,负责务。 系统简介操作系统(英语:OperatingSystem,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基......
  • centos7使用yum安装postgis数据库
    https://www.postgresql.org/download/linux/redhat/1添加PostgreSQLYum源sudoyuminstallepel-releasesudoyuminstall-yhttps://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm2安装PostgreSQL和PostGISsudo......
  • Hbase 协处理器之将数据保存到es (二级索引)
    利用HbaseCoprocessor实现将插入hbase中的数据保存至ElasticSearch中,实现二级索引目的版本:Hbase:2.1ES:6.3.0一、Coprocessor代码开发协处理器类packagewiki.hadoop.coprocessor;importorg.apache.hadoop.hbase.Cell;importorg.apache.hadoop.hbase.CellUtil;importorg.ap......
  • Three.js教程:访问几何体对象的数据
    推荐:将NSDT场景编辑器加入你的3D工具链其他系列工具:NSDT简石数字孪生访问几何体对象的数据实际开发项目的时候,可能会加载外部模型,有些时候需要获取模型几何体的顶点数据,如果想获取几何体的顶点数据首先要熟悉three.js几何体BoxGeometry和BufferGeometry的结构。访问几何体顶点......
  • Oracle到国产数据库DM的迁移案例
    Oracle到国产数据库DM的迁移案例 阿依纳伐 发表于2020/12/2510:37:49  3.5k+  0  0 【摘要】对于达梦数据库,我在19年之前还没有听过,第一次听到达梦,金仓数据的时候还是我们打算开始做鲲鹏专家服务的技术研讨会上,数据库专家在说国产数据库的提到达梦和金仓,感觉完......
  • 高精度地形DEM数据下载(NASA数据 12.5米分辨率)
    本文介绍从NASA阿拉斯加卫星设备处网站下载高精度DEM数据,下载的数据精度是12.5米分辨率。目前国内大部分可以下载的dem数据都是30米或90米分辨率的,对于更高精度的数据要不就是需要付费下载,要不就是涉密数据无法获取。下载地址:https://vertex.daac.asf.alaska.edu/# ASF(Alaska......
  • redis之五种基本数据类型
    0.前言本文主要讲解redis的五种基本数据类型:String、List、Set、SortedSet、Hash。学习如何使用它们,并且了解它们的底层数据结构实现,这样我们才能在适当的应用场景选择最适合的数据类型来解决我们的需求。1.String1.1简单使用String是redis最简单的且最常用的数据类型,可以......
  • 海量数据监控如何选择存储方案? 看转转、得物这些企业是怎么做的
    对于互联网业务而言,为保证服务的稳定运行,就要时刻关注服务器、服务调用、网络状况等各项指标,单是监控数据就存在非常大的量级。为了应对这种挑战,结合监控数据的特点,许多企业开始选择符合业务需求的时序数据库(TimeSeriesDatabase),以便更好地支持运维监控。转转xTDengine“使用......