译者 | 李睿
审校 | 重楼
像软件行业的许多其他领域一样,数据工程领域正在快速发展。在大型语言模型(LLM)和生成式人工智能的推动下,尽管人工智能/机器学习的进步令人关注,但数据工程仍然是推动软件开发创新的根本力量。
Polaris是一种用于数据湖屋(Lakehouse)的目录实现工具,是该领域的最新进展之一,它加速了互操作性的进展,并实现了零数据复制架构。在最近于2024年11月举办的Snowflake Build大会上,Polaris Catalog、Iceberg以及AI/ML共同成为备受关注与热议的话题。
开放表格式和数据湖屋
数据湖屋的概念凭借其开放表格式,已经成为大数据技术领域内的热门议题之一。开放表格式在塑造行业中的数据湖屋模式方面始终走在前列。尽管还有其他具有竞争力的开放表格式技术,但Iceberg无疑在这一领域内占据领先地位。支持传统数据仓库模式的数据云巨头Snowflake公司也在积极引领数据湖屋模式的发展,而Iceberg正是其解决方案的核心支柱,发挥着举足轻重的作用。
Iceberg采用了三层架构模型,其核心在于其根目录,这一目录扮演着Iceberg中表元数据管理者的关键角色。Snowflake公司通过推出了名为Polaris的目录服务,在目录领域带来了革命性的变革。该目录正迅速获得认可,并有望在未来几个月内得到进一步增长。
在深入讨论Polaris之前,需要了解有关数据湖屋、Iceberg和Snowflake的更多细节,为探讨Polaris奠定基础。几十年来,软件行业一直沿袭着使用数据仓库作为核心分析平台的传统。然而,随着基于Hadoop的大数据技术的兴起,支持半结构化和非结构化数据的数据湖(data lake)于2010年应运而生。尽管数据湖在过去十年中迅速增长,但与此同时,它也暴露出了一系列亟待解决的问题,例如事务支持的缺失、模式强制执行的不足等。
为了克服数据湖的局限性,大数据领域中出现了一种新的模式——数据湖屋。数据湖屋通过提供事务支持、模式实施(如数据仓库)以及异构数据格式(如数据湖)的支持,结合了数据仓库和数据湖的优点。开放文件格式是数据湖屋架构成功的基础,特别是开放表格式。尽管在这一领域内,Delta Lake和Hudi等其他主要参与者同样发挥着重要作用,但Iceberg凭借行业领导者Snowflake公司的支持而脱颖而出。
开放表格式是为了支持数据的零复制以及从多个查询引擎在单一权威的数据源中查询/修改数据而创建的。尽管Snowflake公司起初像传统和现代数据仓库一样使用原生表,并在这一过程中增加了对非结构化数据的支持,但Snowflake公司一直是推广和采用与Iceberg相结合的开放表格式来实现数据湖仓解决方案的领导者。
开放表格式的基本架构概念是关于存储表元数据的。开放表格式不存储实际数据,而是存储“关于数据的数据”。不同的开放表格式有其各自的元数据架构。然而,它们之间的共同模式是都存在一个目录组件。在开放表格式中,目录包含指向实际表的元数据指针,这些表以开放文件格式(如Parquet、ORC)存储数据。
目录的挑战:Polaris背后的驱动力
对于目录实现,业界一直在使用诸如Hive Metastore、AWS Glue、Nessie、Unity Catalog等技术。可用目录技术的激增阻碍了互操作性和开放表格式的零数据复制原则充分发挥其潜力,因为不同的目录技术开始导致组织内部出现供应商锁定和数据一致性问题。图1展示了由于缺乏统一的目录解决方案而导致组织一直在实现的典型架构。
图1:Iceberg生态系统的多目录技术解决方案
不同的查询引擎或数据平台使用不同技术开发的目录来访问Iceberg的元数据(如图1所示)和存储层,因此无法在组织内部提供存储的统一视图。此外,由于没有共享的目录标准,不仅目录数据会被重复且存在不一致性,而且其他方面(如安全和访问控制配置)也需要被重复,从而造成不必要的开销。
为了应对实现真正互操作性和零数据复制的挑战,Snowflake公司推出了Polaris Catalog这一创新性的目录服务。该目录设计的初衷是使不同的查询引擎能够轻松访问,并且展望未来,它还将支持所有主流的开放表格式,而不仅仅是Iceberg。
关于Polaris:优势与现状
作为开放表格式的目录,Polaris主要提供以下三个好处:
- 读和写操作的跨引擎互操作性。
- 支持在任何地方托管目录——在云中或组织的数据中心作为容器化应用程序。
- 集中的安全和基于角色的访问控制。
Snowflake公司将Polaris Catalog外包给Apache软件基金会,以鼓励社区驱动的技术进步,并使其与供应商保持中立,以实现Polaris的多个长期目标,如下所示:
- 使其与所有开放表格式(如Delta Lake、Hudi)兼容
- 支持API表格维护
- 更广泛的安全和访问控制,例如支持Okta/Auth0等IDP、细粒度访问控制等。
当前,Polaris软件正处于Apache软件基金会的孵化阶段。尽管Snowflake公司已将Polaris的开发工作交由Apache软件基金会负责,但Snowflake依然在其自身的部署中持续为Polaris Catalog提供支持。Snowflake所托管的Polaris Catalog被称为Snowflake Open Catalog。
Polaris架构
Polaris Catalog在Iceberg生态系统中的架构如图2所示。查询引擎将使用Polaris REST API访问Polaris Catalog中的表元数据。Polaris API的核心业务逻辑将作为接口,通过Iceberg元数据提供对存储在开放文件格式(如Parquet、ORC)中的实际数据的访问。
图2:Iceberg生态系统中的Polaris架构
Polaris架构围绕两个核心组件构建:用于数据安全的基于角色的访问控制(RBAC)和用于管理表元数据的Data Catalog。在RBAC中,主体(Principal)代表用户或系统身份,而主体角色则定义分配给该主体的权限。一个主体可以拥有多个主体角色,并且每个主体角色可以包含多个主体。在目录方面,目录作为逻辑数据库或模式,组织成命名空间(Namespaces),这些命名空间对Iceberg表或视图进行分组。权限通过目录角色进行管理,这些角色定义了目录对象的直接权限,而主体角色则通过其与目录角色的关联来继承这些权限。
该架构确保在逻辑组织的框架内对Iceberg表和视图进行安全、可扩展和有效的管理。
从基础设施部署的角度来看,尽管Polaris可以作为容器化的应用程序在云平台和组织的数据中心中运行,但是需要为查询引擎进行适当的网络连接,以便能够访问Polaris基于REST API的目录。目前,将Polaris Catalog部署在公共云平台之外的情况并不常见,因为通常希望实际的开放文件格式存储将位于云平台中。
随着技术的进步,为了满足各个行业(如金融、医疗保健)组织的数据隐私和地理限制要求,在组织的防火墙内部署Polaris可能是一个有价值的用例。
Polaris的实际操作
Snowflake公司在2024年6月发布了Polaris,并于7月将其开源给Apache软件基金会。该项目目前在Apache处于孵化状态。Polaris Catalog的开源版本可以在GitHub存储库中获得。开发人员只需几个简单的步骤就可以在本地工作站中开始使用Polaris。
1.安装OpenJDK和Docker
JDK的最低版本要求是21,Docker的最低版本要求是27。除此之外,还需要安装Gradle这一工具编译项目源代码。
2.克隆存储库
要在本地工作站中设置Polaris,第一步是克隆存储库。
3.在Docker容器中运行Polaris
Plain Text
docker compose -f docker-compose.yml up --build
4.作为本地Java应用程序运行
Plain Text
gradle runApp
GitHub中的Polaris项目分为两个主要模块。
- polaris-core:包含实体定义和业务逻辑。这是通过Iceberg元数据与开放文件格式存储进行交互的层。
- API:包含Polaris的REST API定义。查询引擎与API通信以访问底层数据。
结论
在数据湖屋和开放表格式不断发展的背景下,Polaris是下一个重大突破。这项技术有助于消除对查询引擎特定数据目录的需求,并带来可互操作的协调解决方案。
Polaris最初是为Iceberg构建的,它不仅旨在成为查询引擎的通用平台,而且未来的开发目标是使其能够跨其他开放表格式工作,例如Delta Lake。拥有可互操作的目录技术可以降低组织架构的复杂性,有助于实现零数据复制原则,减少IT的支持开销,并最终为组织节省成本。Polaris正在不断发展,预计在未来几个月内,在Apache软件基金会和Snowflake公司的推动下,其采用率将会上升。
原文标题:Revolutionizing Catalog Management for Data Lakehouse With Polaris Catalog,作者:Dipankar Saha