Iceberg Catalog 选型
Catalog 决定湖表如何被定位、以及并发提交如何协调:Hive Metastore 兼容存量 Hive 生态,REST Catalog 提供统一的服务化入口,云上 Glue 等托管目录与云原生存储集成。同一张表必须通过同一个 Catalog 访问,否则不同引擎会看到不同的元数据,出现「表能查到但读不到数据」这类难排查的问题。
基本信息
| 作用 | 表定位与提交协调 |
|---|---|
| 常见类型 | HMS、REST Catalog、云托管目录 |
| 一致性要求 | 同一张表只走同一个 Catalog |
| 配置位置 | 各引擎的 catalog 配置项 |
| 切换影响 | 元数据指针迁移与读写验证 |
典型使用场景
- 已有 Hive 集群:用 Hive Metastore 作为 Catalog,存量表可平滑接入
- 多引擎共享:部署 REST Catalog 提供服务化入口,各引擎统一指向
- 公有云环境:使用云托管目录,省去元数据服务运维
- 选型评审:先确认各引擎支持该 Catalog 类型的版本,再决定接入方式
- 排查表读不到数据:对比各引擎看到的表路径与元数据指针是否指向同一位置
Spark 侧 Catalog 配置
Spark 侧 Catalog 配置
spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
spark.sql.catalog.demo=org.apache.iceberg.spark.SparkCatalog
spark.sql.catalog.demo.type=hive # Catalog 类型:hive 或 rest
spark.sql.catalog.demo.uri=thrift://hms:9083 # HMS 地址,REST 则填服务地址
spark.sql.catalog.demo.warehouse=s3://corp-lake/warehouse # 表数据根路径
spark.sql.defaultCatalog=demo # 默认目录走 Iceberg
-- 建表语句不带 Catalog 前缀时会被路由到默认 CatalogCatalog 类型对照
| 类型 | 特点 | 适用 |
|---|---|---|
| Hive Metastore | 兼容存量生态,运维熟悉 | 已有 Hive 集群的团队 |
| REST Catalog | 服务化统一入口,多引擎友好 | 多引擎共享同一批表 |
| 云托管目录 | 免运维,与云存储集成 | 公有云环境 |
同一张 Iceberg 表被两种 Catalog 指向不同元数据位置时,A 引擎写入的数据在 B 引擎完全看不到,而两侧都不报错,排查成本很高。
迁移 Catalog(如从 HMS 换到 REST)要让已有表的元数据指针同步迁移,建议按表分批切换并逐一验证读写,避免出现两份并行的元数据。
不同引擎对 Catalog 类型与版本的支持范围不同,接入前先做一次最小验证:建表、写入、读取、变更结构各跑一次,比通读配置文档更快暴露兼容问题。