Paimon笔记

支持高吞吐数据摄入、变更追踪、高效分析的流批数据湖

基于LSM提升写入速度并降低写入消耗;基于有序的SortRun裁剪大部分数据以提升查询性能;支持多种merge引擎实现高性能流表打宽

特点

是 Flink SQL 的内置存储

  • Flink DDL 会真实创建或删除物理表,不再只是一个外部物理表的映射
  • 掩盖和抽象底层技术细节,没有烦人的选项如connector配置

支持亚秒级流写入和消费

高吞吐量扫描能力

降低了认知门槛,存储需要自动处理各种Insert/Update/Delete输入和表定义

  • 接收任何类型的变更日志,接收任何类型的数据类型
  • 表可以有主键或没有主键

支持多种引擎

存储

LogStore append延时很低,但有TTL限制,可用于流读。FileStore确保可以查询历史数据:

  • LogStore:存储最新数据,支持秒级流式增量消费,默认使用Kafka实现
    • 完全支持插入/更新/删除
    • 根据主键(若有)或整行(无主键)将记录散列到不同的kafka分区
  • FileStore:存储最新数据+历史数据,提供批量Ad-Hoc分析,使用LSM、parquet/orc实现
    • 为了完全支持插入/更新/删除和可选的主键定义,我们需要一个支持更新和自定义合并的灵活存储结构,LSM 是一个不错的选择
    • 为了支持高性能和多场景分析,应该支持多种列式文件格式
    • key若有主键则默认json格式,若无则空。value默认使用debezium-json格式

如果是流模式且开启change-tracking,log与file同时生效,生成HybridSource读,如果是流模式且未开启change-tracking、批模式,生成FileStoreSource读。

文件结构

元数据与数据存储在表的同一级目录下,包括 snapshot 目录、manifest 目录、schema 目录、数据文件。桶文件是读写的最小存储单元。

每个snapshot会有对应的一个base清单列表、一个delta清单列表文件,base清单列表包含了本次操作之前的清单文件,清单列表文件会对应一个或多个清单,每个清单会对应一个或多个不同操作类型的数据文件

  • snapshot 目录:记录了每次提交产生的 snapshot 文件,记录了本次 commit 正在使用的schema文件、新增了哪些 manifest 文件、删除了哪些 manifest 文件
    • snapshot-x 一次checkpoint生成一个或两个snapshot(当有append、compact同时发生时出现会生成两个),若检查点间隔内未写入数据,只会创建compact快照
    • EARLIEST 最早的快照编号,一开始是-8
    • LATEST 最新的快照编号
  • manifest 目录:记录了每次经 checkpoint 触发而提交的数据文件变更,每个文件记录了产生了哪些 sst 文件、删除了哪些 sst 文件,以及每个 sst 文件所包含记录的主键范围、每个字段的 min/max/null count 等统计信息
  • schema 目录:表结构文件
  • 数据文件:按分区、存储桶分到对应目录,每个桶目录都包含一个LSM树和变更日志文件,每个 sst 文件则包含了按主键排好序的、列存格式的记录。对于 Level 0 的文件,会异步地触发 compact 合并线程来消除主键范围重叠带来的读端 merge 开销
    • LSM树将sst文件组织成多个SortedRun,SortedRun与文件是一对多的关系,对于主键表,不同的SortedRun可能具有重叠的主键范围或相同的主键,查询LSM树时必须MOR,根据指定的合并引擎和每条记录的时间戳来合并所有SortedRun
    • 当write-buffer-size耗尽时会将数据flush生成文件

基于Flink&Paimon实现,提供数据一致性管理能力,解决流式数仓普遍存在的问题

paimon通过snapshot定义数据版本,即数据按snapshot对齐。

流式数仓普遍存在的问题:

  • 缺少血缘管理(表血缘、数据血缘)
  • 缺少统一的版本管理(多表关联查询时不一致)
  • 数据订正困难(复杂的数据修正过程、链路双跑、业务逻辑修正)

实现方案:提交阶段查询系统表中的血缘表设置起始消费位置;运行阶段按照消费的snapshot粒度响应chkpt请求,chkpt coordinator将barrier放在两个snapshot中间;chkpt成功后通知sink提交对应的表;提交完成后由CommitListener将血缘关系写入系统表

0

Catalog

  • file
CREATE CATALOG my_catalog WITH ( 'type' = 'paimon', 'warehouse' = 'hdfs:///path/to/warehouse' ); USE CATALOG my_catalog;
  • hive

分类
  • 管理表,paimon catalog下建的表,删除会删所有数据
  • 外部表,非paimon catalog下建的表,属性要有'connector'='paimon', 'path'='xxx',可以直接读写外部的paimon数据,删除后只是show tables无,未删元数据、数据
  • 临时表,仅flink支持,在paimon catalog下建的外部表,会话级的,会话退出后自动失效。create tempoary table t1,with属性与外部表一样
  • 系统表,表名$系统表名,如快照表$snapshots、schema表$schemas、选项表$options、审计日志表$audit_log、文件表$files
有主键表

如果定义具有主键的表,则可以在表中插入、更新或删除记录。

无主键表

1、append表

若无主键则默认是append表。流式传输只能向表中插入一条完整的记录。这种类型的表适合不需要流式更新的用例。默认是zstd压缩

CREATE TABLE my_table ( product_id BIGINT, price DOUBLE, sales BIGINT ) WITH ( 'file.compression' = 'zstd' );

流式读取:

  • 默认情况下,流式读取在第一次启动时会对表生成最新的快照,并继续读取最新的增量记录。
  • 可以指定scan.mode、scan.snapshot-id、scan.timestamp-millis或scan.file-creation-time-millis仅流式读取增量。

OLAP查询

  • 按顺序跳过数据,Paimon 默认记录清单文件中每个字段的最大值和最小值,在查询的时候,根据WHERE查询的条件,根据manifest中的统计信息做文件过滤
  • 按文件索引跳过数据
CREATE TABLE <PAIMON_TABLE> (<COLUMN> <COLUMN_TYPE> , ...) WITH ( 'file-index.bloom-filter.columns' = 'c1,c2', 'file-index.bloom-filter.c1.items' = '200' );

2、bucketed append表

必须指定bucket-key

CREATE TABLE my_table ( product_id BIGINT, price DOUBLE, sales BIGINT ) WITH ( 'bucket' = '8', &#
<think>好的,我现在要帮助用户了解Paimon的部署方法或教程。首先,我需要回忆一下关于Paimon的相关知识,尤其是部署方面的信息。根据用户提供的引用内容,Paimon使用两阶段提交协议来提交数据,并且表类型和数据合并方式涉及到变更数据的生成。不过这些引用内容主要涉及数据写入和合并,并没有直接提到部署方法。 接下来,我应该考虑Paimon作为数据存储系统,通常可能依赖哪些组件。例如,很多大数据系统如Apache Flink或Hadoop生态中的工具可能需要特定的部署步骤。Paimon可能作为Flink的一个组件存在,或者需要与Flink集成使用。因此,部署Paimon可能涉及到Flink的安装配置。 然后,我需要思考如何结构清晰地回答用户的提问。通常,部署指南会包括环境准备、安装步骤、配置参数、验证安装等部分。可能还需要提到依赖项,比如Java环境、HDFS或对象存储的配置,以及权限设置等。 此外,用户提到的两阶段提交协议和changelog-producer设置可能与表的配置有关,但部署时可能需要确保这些功能所需的组件已经正确安装。比如,如果Paimon需要与Hadoop集成,那么Hadoop的环境变量和配置文件需要正确设置。 可能还需要参考官方文档,但用户提供的引用中没有直接链接。因此,在回答中需要建议用户查阅官方资源以获得最新指南,并给出一般性的部署步骤。例如,先安装Flink,然后添加Paimon的依赖,配置核心参数如存储路径,最后验证是否能正确创建表。 另外,用户可能对实际操作的步骤感兴趣,比如如何通过代码或命令行进行部署,是否需要编译源码,或者是否有现成的Docker镜像可用。这些细节如果无法确定,应该建议用户查看官方文档或社区资源。 最后,生成相关问题时要围绕部署的各个方面,比如环境准备、依赖管理、配置优化、验证方法以及常见问题处理。确保问题能够帮助用户深入理解部署过程中可能遇到的挑战和解决方案。</think>### Paimon部署方法分步说明 根据Paimon的技术特性[^1][^2],其部署需要与大数据计算框架(如Apache Flink)协同工作,以下是通用部署流程: 1. **环境准备** - 安装Java 8/11运行环境 - 部署Hadoop HDFS或对象存储(如S3/MinIO) - 配置Apache Flink 1.15+集群(Standalone/YARN/K8s模式) 2. **组件集成** ```bash # 在Flink lib目录添加依赖 wget https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-flink/0.5/paimon-flink-0.5.jar ``` 3. **存储配置** ```yaml # flink-conf.yaml paimon.storage.path: hdfs://namenode:9000/paimon paimon.s3.endpoint: https://your-s3-endpoint ``` 4. **表创建验证** ```sql CREATE CATALOG my_paimon WITH ( 'type'='paimon', 'warehouse'='hdfs://cluster/paimon' ); CREATE TABLE my_paimon.db.sample ( id INT PRIMARY KEY, data STRING ) WITH ( 'changelog-producer' = 'input' -- 变更日志生成策略[^2] ); ``` 5. **提交测试作业** ```python # PyFlink示例 from pyflink.table import EnvironmentSettings t_env = TableEnvironment.create(EnvironmentSettings.in_streaming_mode()) t_env.execute_sql("INSERT INTO my_paimon.db.sample VALUES (1, 'test')") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值