PAIMON安装测试

参考:https://blog.youkuaiyun.com/wangqiaowq/article/details/154058848

参考“: apache flink + Paimon  快速搭建指南 - 兰丰岐 - 博客园

jdk已有

minio服务已有

http://192.168.1.243:19001/

安装flink服务

wget https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.18.1/flink-1.18.1-bin-scala_2.12.tgz

tar zxvf flink-1.18.1-bin-scala_2.12.tgz -C /opt/

wget https://repo1.maven.org/maven2/org/apache/paimon/paimon-s3/0.8.0/paimon-s3-0.8.0.jar wget https://repo1.maven.org/maven2/org/apache/paimon/paimon-flink-1.18/0.8.0/paimon-flink-1.18-0.8.0.jar wget https://repo1.maven.org/maven2/org/apache/flink/flink-connector-jdbc/3.1.2-1.18/flink-connector-jdbc-3.1.2-1.18.jar wget https://repo1.maven.org/maven2/org/apache/flink/flink-shaded-hadoop-2-uber/2.8.3-10.0/flink-shaded-hadoop-2-uber-2.8.3-10.0.jar wget https://repo1.maven.org/maven2/org/apache/flink/flink-s3-fs-hadoop/1.18.0/flink-s3-fs-hadoop-1.18.0.jar

cp ./*.jar /opt/flink-1.18.1/lib/

start flink

cd /opt/flink-1.18.1/

修改

conf/flink-conf.yaml

# JobManager 地址(客户端用来连接的地址)
jobmanager.rpc.address: 192.168.1.244
jobmanager.rpc.port: 6123

# JobManager 绑定地址(实际监听的网卡)
jobmanager.bind-host: 0.0.0.0

# TaskManager
taskmanager.bind-host: 0.0.0.0
taskmanager.host: 192.168.1.244  # 如果 TM 和 JM 不在同一台,这里要设为 TM 自己的 IP

# REST API
rest.port: 8081
rest.address: 192.168.1.244      # 告诉客户端“用这个地址访问我”
rest.bind-address: 0.0.0.0       # 实际监听所有接口

支持远程访问

bash ./bin/stop-cluster.sh


bash ./bin/start-cluster.sh

Apache Flink Web Dashboard

--------------------------------------------------------------------

在 minio 上 创建 warehouse Bucket 

bash flink 客户端:

cd /opt/flink-1.18.1/

./bin/sql-client.sh embedded

创建 Iceberg Catalog 和表

CREATE CATALOG my_catalog WITH (
    'type' = 'paimon',
    'warehouse' = 's3://warehouse/wh',
    's3.endpoint'='http://192.168.1.243:9000',
    's3.access-key' = 'minio',
    's3.secret-key' = 'minio@123',
    's3.region' = 'us-east-1'
);

1. CREATE CATALOG paimon

  • 创建一个名为 paimon 的 Catalog。
  • Catalog 是数据库对象的容器,可以包含多个数据库(database),每个数据库又可以包含多个表(table)。

2. PROPERTIES (...) 中的参数说明:

✅ "type" = "paimon"
  • 指定 Catalog 的类型为 Paimon
  • 这告诉系统使用 Paimon 的 Catalog 实现来管理元数据和表结构。
✅ "warehouse" = "s3://warehouse/wh/"
  • 仓库路径(Warehouse Path):这是 Paimon 存储所有数据库和表数据的根目录。
  • 所有在该 Catalog 下创建的数据库和表的数据文件(如 Parquet、ORC 等)以及元数据(如 snapshot、manifest 等)都会存放在这个路径下。
  • 示例中使用的是 S3 路径:s3://warehouse/wh/,表示数据将存储在名为 warehouse 的 S3 bucket 中的 wh/ 目录下。
✅ "s3.endpoint" = "http://minio:9000"
  • S3 兼容服务的访问地址
  • 此处使用的是 MinIO(一个开源的 S3 兼容对象存储服务),运行在本地或内网的 minio:9000 地址。
  • 如果是 AWS S3,通常不需要设置 endpoint(或设为 s3.amazonaws.com),但使用 MinIO、Ceph、或其他 S3 兼容服务时必须显式指定。
✅ "s3.access_key" = "admin"
  • 访问 S3 服务所需的 Access Key
  • 类似于用户名,用于身份验证。
  • 在 MinIO 中,默认的 access key 可以是 admin(取决于部署配置)。
✅ "s3.secret_key" = "password"
  • 访问 S3 服务所需的 Secret Key
  • 类似于密码,与 access key 配对使用进行身份认证。
  • 示例中使用的是明文密码 password,实际生产环境中应使用安全方式管理密钥(如通过环境变量、密钥管理服务等)。
✅ "s3.region" = "us-east-1"
  • S3 区域(Region)
  • 虽然 MinIO 本身不严格区分 region,但很多 S3 客户端库(如 AWS SDK)要求提供 region,否则可能报错。
  • 设置为 us-east-1 是一种常见做法,尤其当使用兼容 S3 的服务时,即使该服务不真正使用 region 概念。

补充说明:

  • 这些配置使得 Paimon 能够通过 S3 API 将数据持久化到 MinIO。
  • 所有写入 Paimon 表的数据最终会以对象形式存储在 s3://warehouse/wh/ 路径下,结构类似:
    s3://warehouse/wh/
      ├── database1/
      │   └── table1/
      │       ├── snapshot/
      │       ├── manifest/
      │       └── data/
      └── database2/
          └── ...

USE CATALOG my_catalog;

-- create a word count table
CREATE TABLE word_count (
    word STRING PRIMARY KEY NOT ENFORCED,
    cnt BIGINT
);

插入数据

USE CATALOG my_catalog;
-- insert data into word count table
insert into word_count values ('hello',2);

在 Apache Paimon(原 Flink Table Store)中,当你创建一个表并写入数据后,Paimon 会在你指定的 warehouse 路径(例如 s3://warehouse/wh/)下,为每个数据库和表生成一套结构化的目录和文件。这些文件共同构成了 Paimon 表的元数据 + 数据存储体系。

下面以一个典型 Paimon 表的目录结构为例,解释各个目录和文件的含义:


📁 示例路径结构(假设数据库为 default,表为 my_table

s3://warehouse/wh/
└── default.db/                ← 数据库目录(固定以 .db 结尾)
    └── my_table/              ← 表目录
        ├── snapshot/          ← 快照元数据
        ├── manifest/          ← Manifest 文件(描述数据文件的索引)
        ├── data/              ← 实际数据文件(按分区/桶组织)
        ├── schema/            ← 表结构(schema)定义
        └── options            ← 表的配置选项(可选)

1. snapshot/ 目录

作用:存储表的快照(Snapshot)信息,用于实现 ACID 事务、时间旅行(Time Travel)、流批统一读取等核心功能。

  • 每次成功提交写入(如 Flink Checkpoint 完成),Paimon 会生成一个新的 snapshot
  • 快照文件是 JSON 格式,命名如:123, ...(数字递增)。
  • 每个快照包含:
    • 指向当前有效的 manifest list(见下文)
    • 提交时间、操作类型(APPEND / COMPACT / OVERWRITE 等)
    • schema ID、watermark 等元信息

🔄 最新快照snapshot/ 下的特殊文件标识:

  • latest:指向最新快照的 ID(如内容为 3
  • earliest:指向最早保留的快照(用于 TTL 清理)

2. manifest/ 目录

作用:存储 Manifest 文件,是数据文件的“索引”或“目录”。

Paimon 使用两级结构:

  • Manifest List(在 snapshot 中引用):记录一组 Manifest File 的路径。
  • Manifest File(存于 manifest/ 目录):每个文件包含多个 Data File Entry,描述:
    • 数据文件路径(如 data/bucket-0/.../xxx.parquet
    • 文件的 min/max key(用于谓词下推)
    • 文件大小、记录数、level(用于 LSM 合并)
    • 分区信息、bucket ID 等

✅ 优点:读取时只需加载 manifest,无需扫描所有数据文件,提升查询性能。


3. data/ 目录

作用:存储实际的数据文件(通常是列式格式,如 Parquet)。

结构示例:

data/
├── bucket-0/
│   └── .../1234567890-0.parquet
├── bucket-1/
│   └── .../1234567890-1.parquet
└── dt=2024-01-01/            ← 如果是分区表
    └── bucket-0/
        └── .../9876543210-0.parquet

  • Bucket 机制:Paimon 默认对主键哈希分桶(bucket),每个 bucket 独立管理 LSM 树,支持高并发写入和高效更新。
  • 文件命名:通常包含时间戳 + bucket ID,便于排序和合并。
  • 格式:默认为 Parquet(支持高效压缩和列裁剪)。

4. schema/ 目录

作用:存储表的 Schema(表结构)历史版本

  • 每次执行 ALTER TABLE ... ADD COLUMN 等 DDL 操作,Paimon 会生成新的 schema 文件(如 12, ...)。
  • schema 文件是 JSON 格式,包含:
    • 字段名、类型、是否主键
    • 分区字段
    • 主键定义
    • 元数据(如创建时间)

🔁 快照中会记录当前使用的 schema ID,实现 schema evolution(模式演进)。


5. options 文件(可选)

  • 一个纯文本文件,存储表级别的配置参数,例如:
    bucket=4
    changelog-producer=input
    merge-engine=deduplicate
  • 这些选项在建表时通过 WITH (...) 指定,Paimon 会持久化到此文件。

补充:.paimon 目录(在 warehouse 根目录) 未找到

s3://warehouse/wh/ 根目录下,你可能会看到:

.paimon/
└── version
  • .paimon/version:记录当前 Paimon 仓库的格式版本号(如 3),用于兼容性检查。
  • 防止不同版本的 Paimon 客户端误操作导致数据损坏。

总结表格

目录/文件作用是否可读是否可删
snapshot/快照管理,实现事务和时间旅行✅ JSON 可读❌ 不可随意删(影响数据一致性)
manifest/数据文件索引✅ JSON/二进制❌ 由 Paimon 自动管理
data/实际数据(Parquet)✅ 可用 Parquet 工具读❌ 不建议手动删
schema/表结构定义✅ JSON 可读
options表配置✅ 文本⚠️ 建议通过 DDL 修改
.paimon/version仓库版本标识

🛠️ 运维提示:

  • 不要手动修改或删除这些文件,除非你非常清楚后果。
  • Paimon 提供了 TTL 清理CompactionTag 管理等机制来安全地管理历史数据。
  • 可通过 Paimon 的 FileStoreScan 或 Catalog API 程序化访问元数据。
07-18
Paimon 是一种专为大数据场景设计的统一数据湖格式,支持高效的实时分析和批处理操作。它结合了数据湖和数据库的优势,提供了 ACID 事务、高效的查询性能以及与 Apache Flink 等流处理引擎的深度集成。 ### 核心特性 - **ACID 事务支持**:Paimon 提供了完整的 ACID 特性,确保在并发写入时的数据一致性[^1]。 - **高效的查询性能**:通过列式存储和分区策略优化,Paimon 能够实现快速的数据检索[^2]。 - **流批一体架构**:Paimon 支持流式数据摄入和批量数据处理,使得用户可以在同一套系统中进行实时和离线分析[^3]。 - **多引擎兼容**:除了 Flink,Paimon 还可以与 Hive、Spark 等生态系统中的其他工具无缝集成[^4]。 ### 使用场景 Paimon 主要适用于以下几种使用场景: - **实时数据分析**:对于需要低延迟更新和查询的业务,如金融风控、实时监控等,Paimon 提供了高效的解决方案。 - **数据仓库构建**:作为数据湖的一部分,Paimon 可以用于构建高性能的数据仓库,支持大规模的历史数据分析。 - **日志处理与审计**:由于其良好的追加写入特性和版本控制机制,Paimon 非常适合用于日志存储和审计追踪。 ### 文档资源 官方文档是学习 Paimon 的最佳起点。你可以访问 [Apache Paimon 官方网站](https://paimon.apache.org/) 获取最新的文档资料,其中包括详细的安装指南、配置说明、API 接口定义以及与 Flink 的集成教程等内容。此外,GitHub 上的源码库也包含了许多示例代码和测试用例,有助于开发者深入理解其内部工作机制并进行定制化开发。 ### 示例代码 下面是一个简单的 Python 示例,展示如何使用 PyFlink 向 Paimon 表中插入数据: ```python from pyflink.datastream import StreamExecutionEnvironment from pyflink.table import StreamTableEnvironment, DataTypes from pyflink.table.descriptors import Schema, FileSystem, Paimon env = StreamExecutionEnvironment.get_execution_environment() t_env = StreamTableEnvironment.create(env) # 创建一个 Paimon 表 t_env.connect(Paimon() .version("0.4") # 指定 Paimon 版本 .database_name("default_database") .table_name("example_table")) \ .with_schema(Schema() .field("id", DataTypes.INT()) .field("name", DataTypes.STRING())) \ .create_temporary_table("paimon_table") # 插入一行数据到 Paimon 表 t_env.from_elements([(1, 'Alice'), (2, 'Bob')], ['id', 'name']).execute_insert('paimon_table').wait() ``` 这段代码首先设置了 Flink 流执行环境,并创建了一个临时的 Paimon 表。然后,它向该表中插入了一些示例数据。这个例子展示了如何利用 PyFlink API 来操作 Paimon 数据库的基本流程。 如果你正在寻找更具体的用法或者遇到特定的技术问题,请提供更多细节以便获得针对性的帮助。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值