在过去的十年中,我们的客户成功部署的大规模数据集群已成为推动需求的大数据飞轮,它可以引入更多的数据,应用更复杂的分析,并成就了从业务分析师到数据科学家的许多新数据从业者。这种前所未有的大数据工作负载并非没有挑战。数据架构层就是这样一个领域,不断增长的数据集已经突破了可扩展性和性能的极限。数据爆炸必须用新的解决方案来应对,这就是为什么我们很高兴在Cloudera Data Platform (CDP)引入专为大规模数据集设计的下一代表格式(table format) - Apache Iceberg。今天,我们宣布在公有云的CDP Data Services中发布Iceberg的私有技术预览版 (TP),包括在Cloudera Data Warehousing (CDW)和Cloudera Data Engineering (CDE)中都可以提前尝鲜体验Iceberg。
Apache Iceberg是一种针对PB级分析数据集的新开放表格式(table format)。它被设计和开发为一个开放的社区标准,以确保跨语言和实现的兼容性。Apache Iceberg同样属于Apache软件基金会的开源软件项目,一些公司比如Adobe, Expedia, LinkedIn, Tencent和Netflix等都已经发布了关于他们采用Apache Iceberg来处理大规模分析数据集的博文。
为了通过混合和多云部署提供的灵活性满足对大型数据集的多功能分析,我们在CDP中集成Apache Iceberg,以这个独特的解决方案为我们的客户提供面向未来的数据架构。通过使用Iceberg优化各种CDP Data Services比如CDW, CDE和Cloudera Machine Learning (CML),Cloudera客户可以使用SQL命令定义和操作数据集,使用时间旅行(Time Travel)等功能构建复杂的数据管道,并从Iceberg表部署机器学习模型。除了Shared Data Experience (SDX)、跨混合云/多云的统一管理/部署等CDP的企业功能外,客户还可以从Cloudera对Apache Iceberg 的贡献中受益,这个用于大规模分析数据集的下一代table format。
1.关键设计目标
当我们着手将Apache Iceberg与CDP集成时,我们不仅希望整合新table format的优势,而且还希望扩展其功能以满足现代化企业的需求,包括安全性和多功能分析。这就是我们设定以下创新目标的原因,这些目标将提高跨多功能分析平台的大规模数据集的可扩展性、性能和易用性:
- 多功能分析:Iceberg设计为开放格式且与引擎无关,允许共享数据集。通过我们的贡献,我们扩展了对Hive和Impala的支持,实现了从大规模数据工程 (Data Engineering, DE) 工作负载到快速BI和查询(在DW内)和机器学习 (ML) 的多功能分析数据架构的愿景。
- 快速查询计划:查询计划是指在表中查找SQL查询所需文件的过程。在Iceberg中,Iceberg不是在表中列出O(n)个分区(运行时的目录列表)以进行查询计划,而是执行O(1) RPC来读取快照。快速查询计划可实现更低延迟的SQL查询并提高整体查询性能。
- 统一安全:Iceberg与统一安全层的集成对于任何企业客户来说都是至关重要的。这就是为什么从一开始我们就要确保SDX的安全性和治理同样要适用于Iceberg表。
- 分离物理和逻辑布局:Iceberg支持隐藏分区。用户不需要知道表是如何分区来优化SQL查询性能的。随着数据量的变化,Iceberg表可以随着时间的推移演变分区模式。不用开销较高的重写这张表,并且在许多情况下也不需要重写查询。
- 高效的元数据管理:与需要跟踪所有 Hive 表分区(分区key-value paris,数据位置和其他元数据)的 Hive Metastore(HMS)不同,Iceberg分区将数据存储在文件系统上的Iceberg元数据文件中。它消除了Metastore和其后端数据库的负载。
在接下来的部分中,我们将仔细研究如何将Apache Iceberg集成到CDP中,以解决性能和易用性方面的关键挑战。我们还将讨论您对TP版本的期望以及客户可以从中受益的独特功能。
2.CDP中的Apache Iceberg:我们的方法
Iceberg提供了一个定义明确的开放表格式,可以插入到许多不同的平台中。它包括一个支持对快照进行原子更改的目录 - 这是确保我们知道对 Iceberg表的更改是成功还是失败所必需的。此外,文件I/O实现提供了一种读取/写入/删除文件的方法 - 这是使用定义明确的API访问数据和元数据文件所必需的。
这些特性及其预先存在的实现使得将Iceberg集成到CDP中变得非常简单。在CDP中,我们同时启用Iceberg表和Hive表类型,这两者都是我们SDX元数据和安全框架的一部分。通过利用SDX及其metastore,注册少量catalog信息以识别Iceberg表,并且通过保持轻量级的交互允许扩展到大型表,而不会产生元数据存储和查询的通常开销。
3.多功能分析
在Iceberg表在SDX中可用后,下一步是使执行引擎能够利用新表。Apache Iceberg社区拥有大量经验丰富的Spark开发人员,他们集成了Spark执行引擎。另一方面,缺乏Hive和Impala与Iceberg的集成,因此Cloudera将这项工作贡献回社区。
在过去的几个月里,我们在实现Hive写入Iceberg表(Hive读取Iceberg表已实现),和Impala读写Iceberg表取得了显著的进展。使用Iceberg 表,可以更激进地对数据进行分区。例如,通过重新分区,我们的一位客户发现Iceberg表的性能比以前使用Impala查询的Hive外部表好10 倍。以前这种激进的分区策略对于Metastore表是不可能的,因为大量的分区会使针对这些表的任何查询的编译速度非常慢。这个完美的例子说明了为什么Iceberg对于这种大规模分区才是站在光里的英雄。
4.统一安全
将Iceberg表与SDX集成的一个额外好处就是你可以通过Ranger管理Iceberg表的安全。管理员可以在Ranger中控制Iceberg表在表/列/行级别的权限,同时支持字段的动态脱敏,让没有权限的用户使用Hive或Impala访问Iceberg表时看到的是脱敏过后的数据。CDP为Iceberg表提供的细粒度访问控制,可以满足企业客户对安全和治理的要求。
5.外部表转换
为了继续使用存储在外部表中的现有ORC、Parquet和Avro数据集,我们集成并增强了将这些表迁移到Iceberg表格式的特性,当前该特性只支持Spark,但是我们扩充了对Hive的支持。表迁移将保留所有数据文件,而不创建任何副本,只为它们生成必要的Iceberg元数据文件并在一次提交中(a single commit)发布它们。迁移成功完成后,您对表的所有后续读取和写入都将通过Iceberg,并且您的表更改将开始生成新的提交(generating new commits)。
6.下一步是什么
首先,我们将专注于额外的性能测试,以检查并消除我们发现的任何瓶颈,涵盖从CDE和CDW开始的所有CDP Data Services。随着我们向GA迈进,我们将针对特定的工作负载模式,例如使用Apache Iceberg的Spark ETL/ELT和Impala BI SQL分析。
除了最初的GA版本之外,我们还将扩大对其他工作负载模式的支持,以实现我们之前提出的在这种新数据架构上进行多功能分析的愿景。这就是为什么我们热衷于通过以下功能增强Apache Iceberg与CDP的集成:
- ACID支持 - Iceberg v2格式于2021年8月随Iceberg 0.12一起发布,为 ACID 奠定了基础。为了利用新版本提供的行级删除等新功能,需要在 Hive和Impala集成中进一步增强。有了这些新的集成,Hive和Spark将能够在Iceberg v2表上运行UPDATE、DELETE和MERGE语句,而 Impala将能够读取它们。
- 表复制 - 企业客户出于灾难恢复和性能原因需要的关键功能。Iceberg表旨在轻松复制,我们通过与CDP Replication Manager的集成可以让用户体验无缝复制。
- 表管理 - 通过避免文件列表和相关成本,Iceberg表能够存储比Hive ACID表更长的历史记录。我们将启用自动快照管理和压缩,通过仅保留相关快照并将数据重组为查询优化格式,进一步提高Iceberg表的查询性能。
- 时间旅行 - 我们正在考虑其他时间旅行功能,例如查询两个时间点之间的变更集(deltas,增量)(可能使用关键字,例如between或 since)。这些查询的确切语法和语义仍在设计和开发中。