开放 Catalog 是什么?湖仓一体为什么需要 Polaris、Unity Catalog 这类服务?
面试怎么回答
表格式解决数据怎么存,Catalog 解决表在哪、怎么原子提交、谁能访问。以前用 Hive Metastore 或厂商自己的 Catalog,表往往被某个引擎绑定,不同引擎权限不一致,各引擎还直接持有对象存储的长期密钥。开放 Catalog 用统一的 REST 协议(比如 Iceberg REST Catalog)让 Spark、Flink、Trino、Doris 等引擎访问同一套表,在 Catalog 层统一按库表列授权,并通过凭证下发给引擎发只对这张表有效的临时凭证,还能集中做审计和血缘。常见的有 Polaris、Unity Catalog、Gravitino,选型看主力表格式、接入引擎和治理需求。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
数据湖表格式(Iceberg、Delta、Paimon)解决了「数据怎么存」,但「表在哪、谁能用、多个引擎怎么看到同一张表」要靠 Catalog。这两年 Apache Polaris、Unity Catalog、Apache Gravitino 这类开放 Catalog 很热,面试官会问:为什么需要它?
Catalog 管什么
对 Iceberg 来说,Catalog 最核心的工作只有一件:记录每张表当前的元数据文件指针,并保证提交是原子的(两个作业同时写,只有一个能成功换指针)。
在这之上,企业还需要:表和库的目录、权限、审计、血缘、多个存储的统一管理。
以前的问题:Catalog 被引擎绑定
- 用 Hive Metastore 做 Catalog:能用,但它是为 Hive 设计的,权限要另外接 Ranger,跨云、跨区域部署麻烦;
- 用某个厂商自己的 Catalog:表只能被这家的引擎方便地读写,Spark、Flink、Trino、Doris 各连各的,同一张表在不同引擎里权限还不一致;
- 每个引擎直接拿存储的长期 AK/SK 去读写对象存储,密钥散落在各处,权限只能控到桶和目录这一级。
开放 Catalog 解决什么
- 统一的 REST 协议:Iceberg 定义了 REST Catalog 规范,Spark、Flink、Trino、Doris、StarRocks、DuckDB 等引擎都能用同一套协议连同一个 Catalog,「一份数据、多个引擎」才真正成立;
- 统一权限:在 Catalog 层按库、表、列授权,不管用哪个引擎访问,权限都一样;
- 凭证下发(Credential Vending):引擎不再持有长期密钥,而是每次访问表时由 Catalog 下发只对这张表路径有效、短时间过期的临时凭证,安全性高很多;
- 治理能力:审计、血缘、数据发现集中在一处。
常见的几个
- Apache Polaris:Snowflake 开源捐给 Apache,实现 Iceberg REST Catalog,重点在权限和凭证下发;
- Unity Catalog:Databricks 开源的版本,覆盖 Delta、Iceberg 以及非表数据、模型等资产;
- Apache Gravitino:定位是联邦元数据湖,能把 Hive、Iceberg、Kafka、各种数据库的元数据统一管理起来。
选型时看三点:你的主力表格式、要接哪些引擎、权限和治理要做多细。