运行paimon官网demo过程记录
官网demo地址:https://paimon.apache.org/docs/master/engines/flink/
步骤一:环境:ubuntu jdk1.8
sudo apt update
sudo apt install openjdk-8-jdk
java -version
步骤二:安装flink18
-
准备需要的文件
获取连接:
flink:https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.18.0/flink-1.18.0-bin-scala_2.12.tgz
paimon:https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-flink-1.18/0.6.0-incubating/paimon-flink-1.18-0.6.0-incubating.jar
hadoop依赖:https://repo.maven.apache.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
注意事项:
-
flink版本不得低于14
-
需要使用与flink版本对应的paimon的jar包,使用了0.6版本
-
tar zxvf flink-1.18.0-bin-scala_2.12.tgz
2.将paimon、hadoop的jar包放入flink的lib目录
3.修改配置文件 /conf/flink-conf.yaml,设置任务插槽
taskmanager.numberOfTaskSlots: 2
4.启动flink,访问http://localhost:8081
/bin/start-cluster.sh
步骤三:启动sql-client,运行paimon官网demo
-
创建表
--创建一个名为my_catalog的目录,并将其设置为使用paimon类型,该类型通常用于与Paimon存储库相关联。 CREATE CATALOG my_catalog WITH ( 'type'='paimon', 'warehouse'='file:/tmp/paimon' ); USE CATALOG my_catalog; -- create a word count table CREATE TABLE word_count ( word STRING PRIMARY KEY NOT ENFORCED,--主键 cnt BIGINT );
注:Catalogs
Catalog 提供了元数据信息,例如数据库、表、分区、视图以及数据库或其他外部系统中存储的函数和信息。
-
写数据(必须在流模式下) 否则报错org.apache.flink.table.api.ValidationException: Querying an unbounded table ‘my_catalog.default.word_table’ in batch mode is not allowed.
--创建一个临时表,表名为word_table。临时表在当前数据库会话期间有效,会话结束后会被自动删除。该表包含一个列,列名为'word',数据类型为STRING。该表使用了'PRIMARY KEY'约束来指定'word'列为主键,确保每个记录的'word'值是唯一的。 CREATE TEMPORARY TABLE word_table ( word STRING ) WITH ( 'connector' = 'datagen',--阿里云数据生成器 'fields.word.length' = '1' ); -- write streaming data to dynamic table INSERT INTO word_count SELECT word, COUNT(*) FROM word_table GROUP BY word;
-
读数据
SET 'execution.runtime-mode' = 'batch';--批模式
SELECT * FROM word_count;
SET 'execution.runtime-mode' = 'streaming';--流模式
SELECT * FROM word_count;
paimon文件结构
使用create语言创建表后,可以在/tem/paimon/default.db/目录下看到对应于表名的目录,文件夹与paimon文件结构对应
snapshot:快照
schema:存储表的结构
manifest file:是包含有关LSM 数据文件和更改日志文件的文件信息。
partiton:分区
bucket:桶,
data–:存储真实数据
changelog–:变更记录
补充:B+与LSM的简单对比
-
B+树针对读取进行了优化。写入B+树相对代价更高,因为它涉及随机lO,并且可能包括更新磁盘上的多个Page。
-
LSM树的工作方式不同,LSM树针对快速写入进行了优化,写入称为memtable的结构时在内存中进行批处理。
LSM树原理:
- memtable按对象Key排序,通常实现为平衡二叉树。
- 当memtable达到一定大小时,它会作为不可变的排序表刷新到磁盘。SSTable按排序顺序存储Key值对。
- 删除、更新对象也需要特殊处理,因为我们无法将SSTable中的任何内容标记为已删除。为执行删除,它会向对象Key的最新SSTable添加一个称为Tombstone marker。当我们在读取时遇到墓碑,我们知道该对象已被删除。
- 周期性的合并和压缩过程来合并SSTables并丢弃过时或删除的值。
增删改查
insert into test values('c',1000),('d',2000);
update test set cnt=3333 where word ='a'--仅支持批模式,流模式报错 UPDATE statement is not supported for streaming mode now.
select * from test ;
word =‘a’–仅支持批模式,流模式报错 UPDATE statement is not supported for streaming mode now.
select * from test ;
[外链图片转存中...(img-MItKi5tz-1704942621674)]