当前位置:   article > 正文

Apache Iceberg 是什么?

apache iceberg

前言

本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见大数据技术体系


WHAT

在这里插入图片描述

Apache Iceberg 是一种用于庞大分析数据集的开放表格式。

表格式(Table Format)的功能是确定该如何管理、组织和跟踪构成表的所有文件。可以将其视为物理数据文件(用 Parquet 或 ORC 等编写)以及它们如何结构形成表之间的抽象层。

Iceberg 使用类似于 SQL 表的高性能表格式为计算引擎添加了表,包括 Spark、Trino、PrestoDB、Flink、Hive 和 Impala。


好处

使用快照模式意味着 Iceberg 可以保证读写的隔离性。

读者将始终看到数据的一致版本(即没有“脏读”),而无需锁表。

写入器单独工作,不影响实时表,并且仅在写入完成时执行元数据交换,在一个原子提交中进行更改。

使用快照还可以启用时间旅行操作,因为用户可以通过指定要使用的快照对表的不同版本执行各种操作。

使用 Iceberg 也有巨大的性能优势。

在作业规划期间,Iceberg 并没有采用 O(n) 的时间复杂度来列出表中的分区,而是执行时间复杂度是 O(1) 的 RPC 来读取快照。

文件修剪和谓词下推也可以分发到作业中,因此 Hive 元存储不再是一个瓶颈。

这也消除了使用细粒度分区的障碍。

由于每个数据文件存储的统计数据,可用的文件修剪也大大加快了查询规划。


特性

  • 模式演变(Schema Evolution) 支持添加、删除、更新或重命名,并且没有副作用
  • 隐藏分区(Hidden Partitioning) 可以防止用户错误地造成静默不正确的结果或者极慢的查询
  • 分区布局演变(Partition Layout Evolution) 可以随着数据量或查询模式的变化更新表的布局
  • 时间旅行(Time Travel) 允许使用完全相同的表快照的可重现查询,或允许用户轻松检查更改
  • 版本回滚(Version Rollback) 允许用户通过将表重置为良好状态来快速纠正问题

可靠性和性能

Iceberg 是因庞大数据表而诞生的。

生产环境中 Iceberg 单表可以包含几十 PB 的数据,即使在没有分布式 SQL 引擎的情况下这些大表也可以读取。

  • 扫描计划速度很快——读取表或查找文件不需要分布式 SQL 引擎
  • 高级过滤-使用表元数据用分区和列级统计信息修剪数据文件

Iceberg 旨在解决最终一致的云对象存储中的正确性问题。

  • 适用于任何云存储,并通过避免 list 和重命名来减少 HDFS 中的 NameNode 拥塞
  • 串行化的隔离性——表更改是原子的,读者永远不会看到部分或未提交的更改
  • 多个并发编写者使用乐观的并发性,并且在写入冲突的情况下也能重试以确保兼容的更新成功

内部细节

Iceberg 项目最初是在 Netflix 开发的,旨在解决他们使用庞大的 PB 规模表的长期问题。

它于 2018 年作为 Apache 孵化器项目开源,并于 2020 年 5 月 19 日从孵化器毕业

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/824883
推荐阅读
相关标签