不可以不掌握的湖仓一体paimon

不可以不掌握的湖仓一体paimon

paimon 特性

在这里插入图片描述
核心特性

  1. 统一批处理和流处理
    批量写入和读取、流式更新、变更日志生成,全部支持。
  2. 数据湖能力
    低成本、高可靠性、可扩展的元数据。 Apache Paimon 具有作为数据湖存储的所有优势。
  3. 各种合并引擎
    按照您喜欢的方式更新记录。保留最后一条记录、进行部分更新或将记录聚合在一起,由您决定。
  4. 变更日志生成
    Apache Paimon 可以从任何数据源生成正确且完整的变更日志,从而简化您的流分析。
  5. 丰富的表类型
    除了主键表之外,Apache Paimon还支持append-only表,提供有序的流式读取来替代消息队列。
  6. 模式演化
    Apache Paimon 支持完整的模式演化。您可以重命名列并重新排序。

Paimon的CATALOG

Paimon catalog 用于管理paimon表的元数据信息,目前支持四种类型的元存储:

  1. Filesystem Metastore (默认),它将元数据和表文件存储在文件系统中。
  2. hive metastore,它还将元数据存储在 Hive metastore 中。用户可以直接从 Hive 访问这些表。
  3. jdbc 元存储,它还将元数据存储在关系数据库(如 MySQL、Postgres 等)中。
  4. REST MetaStore,旨在提供一种轻量级的方式来从单个客户端访问任何目录后端。
-- Flink SQL
-- FS(HDFS)catalog
-- 上传 $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-(hadoop版本).jar 到$FLINK_HOME/lib 
CREATE CATALOG fs_catalog WITH (
    'type' = 'paimon',
    'warehouse' = 'hdfs:///user/paimon/fs/'
);

-- HIVE catalog
-- 1. 上传flink-sql-connector-hive-(hive版本)-(flink版本).jar上传到到$FLINK_HOME/lib
-- 2. 启动nohup hive --service metastore &
CREATE CATALOG hive_catalog WITH (
    'type' = 'paimon',
    'metastore' = 'hive',
	'uri' = 'thrift://hive-metastore:9083',
	'hive-conf-dir' = '/opt/module/hive/conf',
    'warehouse' = 'hdfs:///user/paimon/hive/'
);

-- MySQL catalog
-- flink-connector-jdbc_(flink版本).jar  mysql-connector-j-(版本号).jar
CREATE CATALOG mysql_jdbc_catalog WITH (
    'type' = 'paimon',
    'metastore' = 'jdbc',
    'uri' = 'jdbc:mysql://<host>:<port>/<databaseName>',
    'jdbc.user' = 'bigdata', 
    'jdbc.password' = '123456', 
    'catalog-key'='jdbc',
    'warehouse' = 'hdfs:///user/paimon/fs'
);

-- REST Catalog
-- 略,需要调用paimon java API,非flinksql

-- 使用指定CATALOG
USE CATALOG hive_catalog;
-- 查看所有CATALOG
SHOW CATALOGl;
-- 查询当前CATALOG
SHOW CURRENT CATALOG;

补充:paimon 默认使用default_catalog,基于会话内存,因此每次重开会话或会话过期,导致元数据未持久化丢失,因此需要用到持久化CATALOG。
在企业中flink-sql在启动时支持配置文件 -i 文件名
FLINK_HOME/conf下创建sql-client-init.sql文件。


-- 设置执行环境
SET 'execution.runtime-mode' = 'streaming';
SET 'parallelism.default' = 4;
SET 'state.checkpoints.dir' = 'hdfs:///flink/checkpoints';
SET 'state.backend' = 'rocksdb';

-- FS catalog
CREATE CATALOG fs_catalog WITH (
    'type' = 'paimon',
    'warehouse' = 'hdfs:///user/paimon/fs/'
);

-- HIVE catalog
CREATE CATALOG hive_catalog WITH (
    'type' = 'paimon',
    'metastore' = 'hive',
	'uri' = 'thrift://hive-metastore:9083',
	'hive-conf-dir' = '/opt/module/hive/conf',
    'warehouse' = 'hdfs:///user/paimon/hive/'
);

-- 创建默认数据库 tmp,防止影响正常库表
USE CATALOG hive_catalog;
CREATE DATABASE IF NOT EXISTS tmp;
USE tmp;

flink sql-client.sh简化命令提交

bin/bash

# 参数检查
if [ $# -lt 1 ]; then
  echo "Usage: $0 [yarn-session|prejob] [sql_file]"
  exit 1
fi

MODE=$1
SQL_FILE=${2:-""}
INIT_FILE="$(dirname "$0")/../conf/sql-client-init.sql"

# YARN Session模式
function start_yarn_session() {
  echo "Starting Flink SQL Client with YARN Session..."
  "$(dirname "$0")/sql-client.sh" \
    -s yarn-session \
    -i "$INIT_FILE" \
    ${SQL_FILE:+-f "$SQL_FILE"}
}

# Pre-job模式
function start_prejob() {
  if [ -z "$SQL_FILE" ]; then
    echo "SQL file required in pre-job mode"
    exit 1
  fi
  echo "Submitting Flink SQL Job..."
  "$(dirname "$0")/sql-client.sh" \
    -u yarn-per-job \
    -i "$INIT_FILE" \
    -f "$SQL_FILE"
}

# 模式选择
case "$MODE" in
  yarn-session) start_yarn_session ;;
  prejob) start_prejob ;;
  *) echo "Invalid mode: $MODE" ;;
esac

paimon DDL语句

创建管理表

在 Paimon Catalog中创建的表就是Paimon的管理表,由Catalog管理。当表从Catalog中删除时,其表文件也将被删除,类似于Hive的内部表。

普通方式
-- 创建表
CREATE TABLE test (
    user_id BIGINT,
    name STRING,
    dt STRING,
    hh STRING,
    PRIMARY KEY (dt, hh, user_id) NOT ENFORCED
);

-- 创建分区表 paimon表默认format orc压缩
CREATE TABLE test_p (
    user_id BIGINT,
    name STRING,
    dt STRING,
    hh STRING,
    PRIMARY KEY (dt, hh, user_id) NOT ENFORCED
) PARTITIONED BY (dt, hh ,user_id)
WITH ('file.format' = 'orc');

-- 创建分区分桶表 默认根据bucket-key hash取mol
CREATE TABLE test_pb (
    user_id BIGINT,
    name STRING,
    dt STRING,
    hh STRING,
    PRIMARY KEY (dt, hh, user_id) NOT ENFORCED
) PARTITIONED BY (dt, hh ,user_id)
WITH (
    'bucket' = '2',
    'bucket-key' = 'user_id'
);
CREATE TABLE tab_name AS SELECT (CTAS)方式建表
CREATE TABLE test2 AS SELECT * FROM test;

-- 指定分区
CREATE TABLE test2_p WITH ('partition' = 'dt') AS SELECT * FROM test_p;
    
-- 指定配置
CREATE TABLE test3 WITH ('file.format' = 'parquet') AS SELECT * FROM test_p;

-- 指定主键
CREATE TABLE test_4 WITH ('primary-key' = 'dt,hh') AS SELECT * FROM test;

-- 指定主键和分区
CREATE TABLE test_5 WITH ('primary-key' = 'dt,hh', 'partition' = 'dt') AS SELECT * FROM test_p;
CREATE TABLE tab_name LIKE (CTL)方式建表
-- 创建与另一个表具有相同schema、分区和表属性的表。
CREATE TABLE test_ctl LIKE test;
### Paimon 的定义与开源数据框架定位 Apache Paimon 是一个开源的数据存储框架,专为支持批处理和流处理的统一数据架构而设计。其核心特性包括支持批量写入和读取、流式更新、变更日志生成等,适用于需要高效处理大规模数据的场景。Paimon 提供低成本、高可靠性、可扩展的元数据管理能力,具备作为数据存储的全部优势[^2]。 Paimon 支持丰富的表类型,例如主键表和仅追加表(append-only 表),后者可用于替代传统消息队列,提供有序的流式读取能力。此外,Paimon 还支持模式演化(schema evolution),包括列的重命名、重新排序等操作,增强了数据管理的灵活性。 ### Paimon一体架构中的集成方式 在一体架构中,Paimon 主要作为数据存储层的核心组件之一,替代传统的数据解决方案,如 Delta Lake、Apache Iceberg 和 Hudi。Paimon 可以无缝集成到主流计算引擎中,包括 Apache Flink 和 Apache Spark,实现高效的批流融合处理[^3]。 例如,在 Flink + Paimon 的组合中,Paimon 支持从任意数据源生成完整的变更日志,简化了流分析流程。Flink 可以直接写入 Paimon 表,并通过变更日志机制实现数据的实时更新与查询。这种集成方式使得一体架构具备更强的实时处理能力,特别适合需要低延迟更新的业务场景[^3]。 ```java // 示例代码:Flink 写入 Paimon 表 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); StreamTableEnvironment tEnv = StreamTableEnvironment.create(env); // 创建 Paimon 表 tEnv.executeSql( "CREATE TABLE paimon_table (" + " id INT PRIMARY KEY," + " name STRING," + " age INT" + ") WITH (" + " 'connector' = 'paimon'," + " 'path' = '/path/to/paimon_table'" + ")" ); // 插入数据 tEnv.executeSql("INSERT INTO paimon_table VALUES (1, 'Alice', 25), (2, 'Bob', 30)"); ``` ### Paimon 替代的传统组件与技术 Paimon 在数据架构中主要替代了以下传统组件: 1. **Delta Lake**:虽然 Delta Lake 提供了 ACID 事务支持和版本控制能力,但其主要面向 Spark 生态系统,对 Flink 等流处理引擎的支持较弱。相比之下,Paimon 更加注重批流融合,支持更广泛的计算引擎集成。 2. **Apache Iceberg**:Iceberg 以高效的查询优化和结构化数据管理见长,但在流式更新和变更日志生成方面能力有限。Paimon 则通过变更日志机制,实现了更完整的流处理能力。 3. **Hudi**:Hudi 支持流式数据摄取和增量更新,但其设计更偏向于 HDFS 存储模型,对对象存储的支持Paimon。此外,Paimon 提供了更丰富的表类型和模式演化能力,提升了数据管理的灵活性[^2]。 在数据库与数据的边界日益模糊的背景下,Paimon 通过统一存储与计算接口,降低了架构复杂性,同时提升了数据处理的实时性和灵活性。这种能力使其成为一体架构中极具竞争力的存储层方案。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值