简介
Apache Paimon 作为新一代 流批一体数据湖存储 ,在实时写入、近实时更新、主键表等场景下表现突出。相比 Iceberg / Hudi,Paimon 更偏向 Streaming-first 的设计,非常适合实时数仓与湖仓融合架构。
本文基于真实生产环境落地经验,详细拆解一套:
Hive Catalog 统一管理 Paimon 元数据
Flink / Spark / Hive 多引擎安全、稳定访问同一份 Paimon 数据湖
一、为什么选择 Hive Catalog 管理 Paimon 元数据?
Paimon 支持多种 Catalog:
-
filesystem catalog
-
hive catalog
-
rest catalog(新)
1️⃣ filesystem catalog 的局限
虽然 filesystem catalog 部署简单,但在生产中存在明显问题:
-
元数据仅存于文件系统
-
多引擎并发访问一致性差
-
不支持 Hive / Spark SQL 原生发现表
-
运维治理能力弱
不适合多引擎、多人协作的生产环境。
2️⃣ Hive Catalog 的优势(生产首选)
使用 Hive Metastore 作为 Paimon 的 Catalog:
-
统一元数据中心(表 / schema / 分区)
-
Flink / Spark / Hive 共享同一套表定义
-
支持 Hive / Spark SQL 直接查 Paimon 表
-
成熟稳定,运维体系完善
本质上:Hive Metastore 只管元数据,数据仍由 Paimon 管理。
二、整体架构设计
1️⃣ 架构总览
+-------------+
| Hive SQL |
+------+------+
|
+------+------+ +------------------+
| Hive Meta | <----> | Paimon Metadata |
| Store | +------------------+
+------+------+ |
| |
+---------+----------+ |
| | |
+----+-----+ +-----+----+ +----------+----+
| Flink SQL| | Spark SQL| | HDFS / S3 |
+----------+ +----------+ +---------------+
-
Hive Metastore:统一元数据服务
-
Paimon:负责数据文件、快照、索引
-
HDFS / OSS / S3:数据与表目录存储
-
Flink / Spark / Hive:多引擎访问
三、基础环境准备
1️⃣ 组件版本建议(生产验证)
| 组件 | 推荐版本 |
|---|---|
| Paimon | 0.7.x / 0.8.x |
| Flink | 1.17 / 1.18 |
| Spark | 3.3+ |
| Hive Metastore | 2.3.x / 3.1.x |
| Hadoop | 3.x |
⚠️ 注意:Spark 访问 Paimon 不依赖 Hive 执行引擎,只使用 Metastore。
2️⃣ Hive Metastore 要求
-
独立部署 HMS(推荐)
-
MySQL / PostgreSQL 作为元数据库
-
所有引擎 网络可达 HMS
四、Paimon + Hive Catalog 部署配置
1️⃣ 创建 Warehouse 目录
hdfs:///warehouse/paimon
该目录下每个 database 对应一个子目录。
2️⃣ Flink 中配置 Hive Catalog
(1)准备依赖
将以下 jar 放入 Flink lib:
-
paimon-flink-*.jar
-
hive-exec-*.jar
-
hive-metastore-*.jar
(2)Flink SQL 创建 Catalog
sql
CREATE CATALOG paimon_hive WITH (
'type' = 'paimon',
'metastore' = 'hive',
'uri' = 'thrift://hms:9083',
'warehouse' = 'hdfs:///warehouse/paimon'
);
USE CATALOG paimon_hive;
3️⃣ 创建 Paimon 表(Flink 写入)
sql
/* primary key */
CREATE TABLE my_table_pk (
user_id BIGINT,
item_id BIGINT,
behavior STRING,
dt STRING,
hh STRING,
PRIMARY KEY (dt, hh, user_id) NOT ENFORCED
);
📌 表定义会同步写入 Hive Metastore。
五、Spark 访问 Hive Catalog 下的 Paimon 表
1️⃣ Spark 依赖准备
将以下 jar 放入 Spark classpath:
-
paimon-spark-3.3-*.jar
-
hive-metastore-*.jar
2️⃣ Spark SQL Catalog 配置
sql
CREATE CATALOG paimon_hive
USING paimon
OPTIONS (
'metastore' = 'hive',
'uri' = 'thrift://hms:9083',
'warehouse' = 'hdfs:///warehouse/paimon'
);
USE paimon_hive;
3️⃣ Spark 查询 Paimon 表
sql
SELECT dt, SUM(amount)
FROM dwd_order
GROUP BY dt;
📌 Spark 直接读取 Paimon 数据文件和快照。
六、Hive 访问 Paimon 表
Hive 不适合写入 Paimon,仅建议作为查询引擎。
1️⃣ Hive 依赖
-
paimon-hive-connector.jar
-
hive-exec-*.jar
2️⃣ Hive 外表映射
sql
CREATE EXTERNAL TABLE dwd_order (
order_id BIGINT,
user_id BIGINT,
amount DECIMAL(10,2)
)
PARTITIONED BY (dt STRING)
STORED BY 'org.apache.paimon.hive.PaimonStorageHandler'
LOCATION 'hdfs:///warehouse/paimon/default.db/dwd_order';
之后即可使用 Hive SQL 查询。