【Iceberg学习五】Iceberg中性能和可靠性保证

Performance

性能

  1. Iceberg 旨在处理巨大的表格,在生产环境中使用,单个表格可以包含数十PB(拍字节)的数据。
  2. 即使是多PB级别的表格,也可以从单个节点读取,无需依赖分布式SQL引擎来筛查表格元数据。

扫描计划

扫描计划是找到查询所需表中文件的过程。

在Iceberg表中的计划可以在单个节点上完成,因为Iceberg的元数据可以用来剪除不需要的元数据文件,除了过滤不包含匹配数据的数据文件。

从单个节点快速扫描计划使得:

  1. 低延迟SQL查询 – 通过消除分布式扫描来规划分布式扫描
  2. 任何客户端访问 – 独立进程可以直接从Iceberg表读取数据

元数据过滤

Iceberg使用两级元数据来跟踪快照中的文件。

  1. 清单文件 存储数据文件列表,以及每个数据文件的分区数据和列级统计信息
  2. 清单列表存储快照的清单列表,以及每个分区字段的值范围
    为了快速扫描计划,Iceberg首先使用清单列表中的分区值范围来过滤清单。然后,它读取每个清单以获取数据文件。有了这个方案,清单列表就像是对清单文件的索引,使得无需读取所有清单就可以进行计划。

除了分区值范围,清单列表还存储了清单中添加或删除的文件数量,以加速操作,如快照过期。

数据过滤

清单文件为每个数据文件包括一组分区数据和列级统计信息。

在计划期间,查询谓词会自动转换为分区数据上的谓词,并首先应用于过滤数据文件。接下来,使用列级值计数、空值计数、下界和上界来排除不能匹配查询谓词的文件。

通过在计划时使用上下界过滤数据文件,Iceberg使用集群数据来消除不运行任务的分片。在某些情况下,这是10倍的性能提升。

Reliability(可靠性)

Iceberg 被设计用来解决在 S3 上运行的 Hive 表面临的正确性问题。

Hive 表通过一个中心元数据存储来跟踪分区,并通过文件系统来跟踪单个文件。这使得对表内容进行原子性更改成为不可能,并且像 S3 这样最终一致性的存储可能会由于使用文件列表来重建表状态而返回不正确的结果。这同样要求作业规划时进行许多缓慢的列表调用:与分区数量成 O(n) 关系。

Iceberg 通过一个持久的树状结构来跟踪每个快照中的完整数据文件列表。每次写入或删除都会产生一个新的快照,尽可能多地重用前一个快照的元数据树,以避免高写入量。

Iceberg 表中的有效快照存储在表元数据文件中,同时附有对当前快照的引用。提交操作通过原子操作替换当前表元数据文件的路径。这确保了对表数据和元数据的所有更新都是原子性的,这是可串行化隔离性的基础。

这带来了更可靠的保证:

可串行化隔离性:所有表更改都发生在原子表更新的线性历史中
可靠读取:读取器始终使用表的一致快照,无需持有锁
版本历史和回滚:表快照作为历史保留,如果作业生成了错误数据,表可以回滚
安全的文件级操作:通过支持原子更改,Iceberg支持新的用例,比如安全地压缩小文件和安全地将延迟数据追加到表中
这种设计也有性能上的好处:

计划时 O(1) 的 RPC 调用:与列出表中 O(n) 个目录来规划作业不同,读取快照只需要 O(1) 的 RPC 调用
分布式规划:文件修剪和谓词下推分布到作业中,移除了元数据存储作为瓶颈
更细粒度的分区:分布式规划和 O(1) 的 RPC 调用消除了当前对更细粒度分区的障碍

并发写操作

Iceberg 支持使用乐观并发来进行多个并发写入。

每个写入器假设没有其他写入器在操作,并为一个操作写出新的表元数据。然后,写入器尝试通过原子性地交换新的表元数据文件和现有的元数据文件来提交。

如果因为另一个写入器已经提交而导致原子交换失败,失败的写入器会通过基于新的当前表状态写出一个新的元数据树来重试。

重试的成本

写入器通过构建变更来避免昂贵的重试操作,以便在重试中可以重用工作。

例如,追加通常会为追加的数据文件创建一个新的清单文件,这个清单文件可以在每次尝试时不重写清单的情况下添加到表中。

重试验证

提交被构建为假设和行动。在冲突后,写入器检查当前表状态是否满足假设。如果满足假设,那么重新应用行动并提交是安全的。

例如,压缩可能会将 file_a.avro 和 file_b.avro 重写为 merged.parquet。只要表中仍然包含 file_a.avro 和 file_b.avro,就可以安全地提交。如果任一文件被冲突提交删除,则操作必须失败。否则,可以安全地移除源文件并添加合并后的文件。

兼容性

通过避免文件列表和重命名操作,Iceberg 表与任何对象存储兼容。不需要一致的列表。

Schemas

Iceberg tables support the following types:

TypeDescriptionNotes
booleanTrue or false
int32-bit signed integersCan promote to long
long64-bit signed integers
float32-bit IEEE 754 floating pointCan promote to double
double64-bit IEEE 754 floating point
decimal(P,S)Fixed-point decimal; precision P, scale SScale is fixed and precision must be 38 or less
dateCalendar date without timezone or time
timeTime of day without date, timezoneStored as microseconds
timestampTimestamp without timezoneStored as microseconds
timestamptzTimestamp with timezoneStored as microseconds
stringArbitrary-length character sequencesEncoded with UTF-8
fixed(L)Fixed-length byte array of length L
binaryArbitrary-length byte array
struct<…>A record with named fields of any data type
listA list with elements of any data type
map<K, V>A map with keys and values of any data type

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/669973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法——二分查找算法

1. 二分算法是什么&#xff1f; 简单来说&#xff0c;"二分"指的是将查找的区间一分为二&#xff0c;通过比较目标值与中间元素的大小关系&#xff0c;确定目标值可能在哪一半区间内&#xff0c;从而缩小查找范围。这个过程不断重复&#xff0c;每次都将当前区间二分…

Kafka零拷贝技术与传统数据复制次数比较

读Kafka技术书遇到困惑: "对比传统的数据复制和“零拷贝技术”这两种方案。假设有10个消费者&#xff0c;传统复制方式的数据复制次数是41040次&#xff0c;而“零拷贝技术”只需110 11次&#xff08;一次表示从磁盘复制到页面缓存&#xff0c;另外10次表示10个消费者各自…

黑马头条 Kafka

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 知…

C语言中的结构体

在C语言中&#xff0c;结构体&#xff08;struct&#xff09;是一种可以封装多个不同类型数据的数据结构。通过使用结构体&#xff0c;我们可以将多个相关的变量组合成一个单一的实体&#xff0c;从而方便地进行管理和操作。在本篇博客中&#xff0c;我们将通过示例代码来详细探…

4.0 Zookeeper Java 客户端搭建

本教程使用的 IDE 为 IntelliJ IDEA&#xff0c;创建一个 maven 工程&#xff0c;命名为 zookeeper-demo&#xff0c;并且引入如下依赖&#xff0c;可以自行在maven中央仓库选择合适的版本&#xff0c;介绍原生 API 和 Curator 两种方式。 IntelliJ IDEA 相关介绍&#xff1a;…

macOS Sonoma 14系统安装包

macOS Sonoma 14是苹果公司最新推出的操作系统&#xff0c;为Mac用户带来了全新的使用体验。Sonoma是苹果继Catalina之后的又一重要更新&#xff0c;它在改善系统性能、增加新功能、优化用户界面等方面做出了显著贡献。 macOS Sonoma 14系统有许多令人兴奋的新功能和改进&…

【DDD】学习笔记-数据模型与对象模型

在建立数据设计模型时&#xff0c;我们需要注意表设计与类设计之间的差别&#xff0c;这事实上是数据模型与对象模型之间的差别。 数据模型与对象模型 我们首先来分析在设计时对冗余的考虑。前面在讲解数据分析模型时就提及&#xff0c;在确定数据项模型时&#xff0c;需要遵…

Sentinel(理论版)

Sentinel 1.什么是Sentinel Sentinel 是一个开源的流量控制组件&#xff0c;它主要用于在分布式系统中实现稳定性与可靠性&#xff0c;如流量控制、熔断降级、系统负载保护等功能。简单来说&#xff0c;Sentinel 就像是一个交通警察&#xff0c;它可以根据系统的实时流量&…

Windows启动一个进程CreateProcess

CreateProcess 函数创建独立于创建进程运行的新进程。 参数接口BOOL CreateProcessA([in, optional] LPCSTR lpApplicationName,[in, out, optional] LPSTR lpCommandLine,[in, optional] LPSECURITY_ATTRIBUTES lpProcessAttributes…

算法学习——LeetCode力扣链表篇1

算法学习——LeetCode力扣链表篇1 203. 移除链表元素 203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 示例 …

一个查看armv8系统寄存器-值-含义的方式

找到解压后的SysReg_xml_v86A-2019-12目录 wget https://developer.arm.com/-/media/developer/products/architecture/armv8-a-architecture/2019-12/SysReg_xml_v86A-2019-12.tar.gz wget https://developer.arm.com/-/media/developer/products/architecture/armv8-a-archi…

新版MQL语言程序设计:组合模式的原理、应用及代码实现

文章目录 一、什么组合模式二、为什么需要组合模式三、组合模式的实现原理四、组合模式的应用场景五、组合模式的代码实现 一、什么组合模式 组合模式是一种结构型设计模式&#xff0c;它允许将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和…

Python 泛型

Python 中的泛型是指在定义函数或类时,允许参数或返回值的类型是任意类型的一种特性。泛型在实际开发中非常有用,它可以增强代码的灵活性、可重用性和安全性。 Python 中的泛型可以通过以下两种方式实现: 使用 TypeVar:Python 3.5 版本及以上的版本支持 TypeVar 类型变量,…

ChatGPT辅助编程,一次有益的尝试

如果大家想学习PCIe&#xff0c;搜索网上的信息&#xff0c;大概率会看到chinaaet上Felix的PCIe扫盲系列的博文 Felix-PCIe扫盲 每次看这个系列博文的时候&#xff0c;我都在想有没有什么方法可以把这个系列的博文都保存到一个pdf文件中&#xff0c;这样方便阅读。于是有了下…

final、finally、finalize区别

一、final (1) 声明类(最终类)&#xff0c;类不可以被继承 (2) 声明方法(最终方法)&#xff0c;子类不可以重写&#xff0c;当前类不可以重载 (3) 声明基本数据类型&#xff0c;值不可以改变&#xff1b;引用数据类型&#xff0c;可以改变值&#xff0c;但是不可以开辟新的内存…

蓝桥杯省赛无忧 课件99 裴蜀定理

前置算法 欧几里得算法 01 什么是裴蜀定理 02 裴蜀定理的数学证明 03 裴蜀定理扩展 04 例题 关联知识 EXGCD(扩展欧几里得算法)

SSRF漏洞给云服务元数据带来的安全威胁

文章目录 前言元数据服务威胁1.1 Metadata元数据1.2 RAM资源管理角色1.3 STS 临时凭据利用1.4 CF云环境利用框架1.5 元数据安全性增强 TerraformGoat2.1 永久性AccessKey2.2 SSRF靶场环境搭建2.3 腾讯云CVM配角色2.4 接管腾讯云控制台 SSRF组合拳案例3.1 上传图片功能SSRF3.2 文…

ubuntu22.04@laptop OpenCV Get Started: 001_reading_displaying_write_image

ubuntu22.04laptop OpenCV Get Started: 001_reading_displaying_write_image 1. 源由2. Read/Display/Write应用Demo2.1 C应用Demo2.2 Python应用Demo 3. 过程分析3.1 导入OpenCV库3.2 读取图像文件3.3 显示图像3.4 保存图像文件 4. 总结5. 参考资料 1. 源由 读、写、显示图像…

Android中设置Toast.setGravity()了后没有效果

当设置 toast.setGravity()后&#xff0c;弹窗依旧从原来的位置弹出&#xff0c;不按设置方向弹出 类似以下代码&#xff1a; var toast Toast.makeText(this, R.string.ture_toast, Toast.LENGTH_SHORT)toast.setGravity(Gravity.TOP, 0, 0)//设置toast的弹出方向为屏幕顶部…

蓝桥杯刷题day07——斐波那契与7

1、题目描述 斐波那契数列的递推公式为:FnFn-1Fn-2, 其中F1F21. 请问, 斐波那契数列的第 1 至 202202011200 项&#xff08;含&#xff09;中, 有多少项的个位 是 7 。 答案提交 这是一道结果填空的题, 你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填…