192.168.10.102=hadoop102
192.168.10.103=hadoop103
192.168.10.104=hadoop104
Paimon是一个流数据湖平台,具有高速数据摄取,变更日志跟踪和高效的实时分析的能力
支持数据库变更日志(cdc)的流式同步或来自离线数据的批量插入和修改
低成本 高可靠性 可扩展的元数据服务
安装部署
提前安装好hive
提前安装好flink集群
flink1.17入门-CSDN博客
提前安装好hadoop集群
提前安装好spark
下载paimon的jar包
https://repository.apache.org/content/groups/snapshots/org/apache/paimon/paimon-flink-1.17/0.5-SNAPSHOT/paimon-flink-1.17-0.5-20230906.001916-146.jar
3台机器都配置
把paimon的jar包,上传到自己的flink的lib目录
cd /opt/module/flink-1.17.1/lib
修改配置
cd /opt/module/flink-1.17.1/conf
vi flink-conf.yaml
#解决中文乱码,1.17之前参数是env.java.opts
env.java.opts.all: -Dfile.encoding=UTF-8
classloader.check-leaked-classloader: false
taskmanager.numberOfTaskSlots: 4execution.checkpointing.interval: 10s
state.backend: rocksdb
state.checkpoints.dir: hdfs://hadoop102:8020/ckps
state.backend.incremental: true
进入hadoop的目录把jar包拷贝到flink中
cd /opt/module/hadoop-3.3.6/share/hadoop/mapreduce
cp hadoop-mapreduce-client-core-3.3.6.jar /opt/module/flink-1.17.1/lib/
在102启动flink yarn session
cd /opt/module/flink-1.17.1/bin
./yarn-session.sh -d
启动之后会在3台机器上 随机选择一台显示YarnSessionClusterEntrypoint进程
在102启动flink的sql客户端
./sql-client.sh -s yarn-session
设置显示模式
SET 'sql-client.execution.result-mode' = 'tableau';
查看yarn控制台
http://hadoop103:8088/cluster
点击详细
进入flink控制台
catalog
Paimon catalog可以持久化元数据
文件系统默认:将元数据和表文件存储在文件系统中
hive:在hive中存储元数据,用户可以直接从hive访问表
默认的文件系统
启动客户端
cd /opt/module/flink-1.17.1/bin
./sql-client.sh -s yarn-session
CREATE CATALOG fs_catalog WITH (
'type' = 'paimon',
'warehouse' = 'hdfs://hadoop102:8020/paimon/fs'
);USE CATALOG fs_catalog;
hive存储
下载jar包到flink的lib目录下
cd /opt/module/flink-1.17.1/lib
wget https://repo.maven.apache.org/maven2/org/apache/flink/flink-sql-connector-hive-3.1.2_2.12/1.15.3/flink-sql-connector-hive-3.1.2_2.12-1.15.3.jar
启动hive,确保9083端口启动
nohup hive --service metastore &
启动sql客户端
cd /opt/module/flink-1.17.1
bin/sql-client.sh -s yarn-session
CREATE CATALOG hive_catalog WITH (
'type' = 'paimon',
'metastore' = 'hive',
'uri' = 'thrift://hadoop102:9083',
'hive-conf-dir' = '/opt/module/hive/conf',
'warehouse' = 'hdfs://hadoop102:8020/paimon/hive'
);
创建初始化sql文件,启动客户端不会丢失catalog
cd /opt/module/flink-1.17.1
vi aa.sql
CREATE CATALOG hive_catalog WITH (
'type' = 'paimon',
'metastore' = 'hive',
'uri' = 'thrift://hadoop102:9083',
'hive-conf-dir' = '/opt/module/hive/conf',
'warehouse' = 'hdfs://hadoop102:8020/paimon/hive'
);CREATE CATALOG fs_catalog WITH (
'type' = 'paimon',
'warehouse' = 'hdfs://hadoop102:8020/paimon/fs'
);SET 'sql-client.execution.result-mode' = 'tableau';
启动sql客户端 并初始化sql文件
cd /opt/module/flink-1.17.1
bin/sql-client.sh -s yarn-session -i aa.sql
管理表
在catalog中创建的表就是paimon的管理表,由catalog管理,当表从catalog删除的时候,表文件也将删除,类似hive的内部表
进入文件系统
use catalog fs_catalog;
创建联合主键
CREATE TABLE test (
user_id BIGINT,
item_id BIGINT,
behavior STRING,
dt STRING,
hh STRING,
PRIMARY KEY (dt, hh, user_id) NOT ENFORCED
);
创建分区表,按照dt和hh分区,分区字段必须是主键
CREATE TABLE test_p (
user_id BIGINT,
item_id BIGINT,
behavior STRING,
dt STRING,
hh STRING,
PRIMARY KEY (dt, hh, user_id) NOT ENFORCED
) PARTITIONED BY (dt, hh);
创建表的其他方式
复制其他表 创建表
CREATE TABLE test1(
user_id BIGINT,
item_id BIGINT
);
CREATE TABLE test2 AS SELECT * FROM test1;CREATE TABLE test_aa LIKE test1;
复制表并指定分区
CREATE TABLE test2_p WITH ('partition' = 'dt') AS SELECT * FROM test_p;
创建表之后,inser into插入的数据以.orc后缀
CREATE TABLE test3(
user_id BIGINT,
item_id BIGINT
) WITH ('file.format' = 'orc');insert into test3 values(1,2);
创建表之后,inser into插入的数据以.parquet后缀
CREATE TABLE test3_op WITH ('file.format' = 'parquet') AS SELECT * FROM test3;
创建表 指定主键
CREATE TABLE test_pk WITH ('primary-key' = 'dt,hh') AS SELECT * FROM test;
创建表指定主键和分区
CREATE TABLE test_all WITH ('primary-key' = 'dt,hh', 'partition' = 'dt') AS SELECT * FROM test_p;
插入分区数据
insert into test_p PARTITION(dt='2023-07-02',hh='1') VALUES(4,4, 'bb');
设置批处理
就是查询的时候 不卡主,直接把结束的位置也展示出来
SET 'execution.runtime-mode' = 'batch';
flink cdc
flink cdc 就是把别的地方的表同步到paimon中
在自己的mysql的my.conf文件下配置下面的内容,开启binlog,并重启mysql
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server=utf8
## 设置server_id,同一局域网中需要唯一
server_id=1
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=row
#开启gtid模式
gtid-mode=on
#强制gtid一致性,开启后对特定的create table不支持
enforce-gtid-consistency=on
#从库binlog记录主库同步的操作日志
log-slave-updates=1
添加flink cdc连接器
cd /opt/module/flink-1.17.1/lib
wget https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-mysql-cdc/2.4.0/flink-sql-connector-mysql-cdc-2.4.0.jar
wget https://repository.apache.org/content/groups/snapshots/org/apache/paimon/paimon-flink-action/0.5-SNAPSHOT/paimon-flink-action-0.5-20230906.001916-132.jar
先把之前的yarn-session清除掉
重启yarn-session 和sql 客户端
cd /opt/module/flink-1.17.1
bin/yarn-session.sh -dbin/sql-client.sh -s yarn-session -i aa.sql
同步单个表
参数说明:
配置 | 描述 |
--warehouse | Paimon仓库路径。 |
--database | Paimon Catalog中的数据库名称。 |
--table | Paimon 表名称。 |
--partition-keys | Paimon 表的分区键。如果有多个分区键,请用逗号连接,例如“dt,hh,mm”。 |
--primary-keys | Paimon 表的主键。如果有多个主键,请用逗号连接,例如“buyer_id,seller_id”。 |
--computed-column | 计算列的定义。参数字段来自 MySQL 表字段名称。 |
--mysql-conf | Flink CDC MySQL 源表的配置。每个配置都应以“key=value”的格式指定。主机名、用户名、密码、数据库名和表名是必需配置,其他是可选配置。 |
--catalog-conf | Paimon Catalog的配置。每个配置都应以“key=value”的格式指定。 |
--table-conf | Paimon 表sink的配置。每个配置都应以“key=value”的格式指定。 |
cd /opt/module/flink-1.17.1
bin/flink run \
/opt/module/flink-1.17.1/lib/paimon-flink-action-0.5-20230906.001916-132.jar \
mysql-sync-table \
--warehouse hdfs://hadoop102:8020/paimon/hive \
--database shucang \
--table t_user_cdc7 \
--primary-keys id \
--mysql-conf hostname=192.168.10.104 \
--mysql-conf server-time-zone=Asia/Shanghai \
--mysql-conf username=root \
--mysql-conf password=123456 \
--mysql-conf port=13306 \
--mysql-conf database-name=shucang \
--mysql-conf table-name='t_user' \
--catalog-conf metastore=hive \
--catalog-conf uri=thrift://hadoop102:9083 \
--table-conf bucket=1 \
--table-conf changelog-producer=input \
--table-conf sink.parallelism=1
进入sql客户端,在对应的catalogs下面的数据库查看表
show catalogs;
use catalog hive_catalog;
show databases;
use shucang;
show tables;
select * from t_user_cdc7;
同步所有表
bin/flink run \
/opt/module/flink-1.17.1/lib/paimon-flink-action-0.5-20230906.001916-132.jar \
mysql-sync-database \
--warehouse hdfs://hadoop102:8020/paimon/hive \
--database shucang \
--mysql-conf hostname=192.168.10.104 \
--mysql-conf server-time-zone=Asia/Shanghai \
--mysql-conf username=root \
--mysql-conf password=123456 \
--mysql-conf database-name=shucang \
--mysql-conf port=13306 \
--catalog-conf metastore=hive \
--catalog-conf uri=thrift://hadoop102:9083 \
--table-conf bucket=1 \
--table-conf changelog-producer=input \
--table-conf sink.parallelism=1
进入sql客户端 在对应的catalogs下面的数据库查看表
show catalogs;
use catalog hive_catalog;
show databases;
use shucang;
show tables;
集成hive
在hive目录下创建auxlib目录,并下载jar包
mkdir /opt/module/hive/auxlib
cd /opt/module/hive/auxlibwget https://repository.apache.org/content/groups/snapshots/org/apache/paimon/paimon-hive-connector-3.1/0.5-SNAPSHOT/paimon-hive-connector-3.1-0.5-20230906.001916-143.jar
然后进入hive目录启动hive
bin/hive
可以看到paimon下的表都同步过来了
show databases;
use shucang;
show tables;
集成spark
进入spark的jars目录下载jar包
cd /opt/module/spark-3.0.0-bin-hadoop3.2/jars
wget https://repository.apache.org/content/groups/snapshots/org/apache/paimon/paimon-spark-3.3/0.5-SNAPSHOT/paimon-spark-3.3-0.5-20230906.001916-143.jar
文件系统默认
启动spark
cd /opt/module/spark-3.0.0-bin-hadoop3.2/bin
./spark-sql --conf spark.sql.catalog.fs=org.apache.paimon.spark.SparkCatalog --conf spark.sql.catalog.fs.warehouse=hdfs://hadoop102:8020/paimon/fs
可以看到表已经从fs同步过来了
use fs.default;
show tables;
hive的catalog
启动spark
./spark-sql \
--conf spark.sql.catalog.hive=org.apache.paimon.spark.SparkCatalog \
--conf spark.sql.catalog.hive.warehouse=hdfs://hadoop102:8020/paimon/hive \
--conf spark.sql.catalog.hive.metastore=hive \
--conf spark.sql.catalog.hive.uri=thrift://hadoop102:9083
可以看到hive的catalog下的表也同步过来了
use hive.default;
show databases;
use shucang;
show tables;