EMR Serverless Spark:结合实时计算 Flink 基于 Paimon 实现流批一体

简介

EMR Serverless Spark 版是开源大数据平台 E-MapReduce 基于 Spark 提供的一款全托管、一站式的数据计算平台。它为用户提供任务开发、调试、发布、调度和运维等全方位的产品化服务,显著简化了大数据计算的工作流程,使用户能更专注于数据分析和价值提炼。

实时计算 Flink 版是阿里云提供的全托管 Serverless Flink 云服务,具备实时应用的作业开发、数据调试、运行与监控、自动调优、智能诊断等全生命周期能力。

Apache Paimon 是一种流批统一的数据湖存储格式,结合 Flink 及 Spark 构建流批处理的实时湖仓一体架构。Paimon 创新地将湖格式与 LSM 技术结合起来,给数据湖带来了实时流更新以及完整的流处理能力。

本文通过Flink Datagen模拟上游数据源,通过实时计算Flink版完成数据的实时摄取,以Paimon湖格式存储;然后通过Serverless Spark完成数据的分析。同时依赖Serverless Spark的调度能力,配置离线的Compact作业完成对Paimon表的湖表管理。

实时计算 Flink 版实时入湖

1. 创建 Paimon Catalog,元数据存储类型选择 dlf(通过DLF实现统一的元数据管理,实现多引擎无缝衔接),Catalog 完整配置如下所示。

catalog name: paimon
metastore: dlf
warehouse: oss://test/warehouse
dlf.catalog.id: x
dlf.catalog.accessKeyId: x
dlf.catalog.accessKeySecret: x
dlf.catalog.endpoint: dlf-vpc.cn-hangzhou.aliyuncs.com
dlf.catalog.region: cn-hangzhou

2. 创建 Paimon 表,按日期和小时分区,其中 category 模拟为 1~10 的随机数,用作后续执行 zorder 的列。设置表属性write-only为true,关闭自动Compact,提升写效率。

create table if not exists `paimon`.`test_paimon_db`.`test_append_tbl`
(
    id        string
    ,data     string
    ,category int
    ,ts       string
    ,dt       string
    ,hh       string
) 
partitioned by (dt, hh)
with (
    'write-only' = 'true'
)
;

3. 启动入湖作业,通过 datagen 源源不断生成数据写入 Paimon 表中,流作业完整 SQL 如下:

CREATE TEMPORARY TABLE datagen
(
    id        string
    ,data     string
    ,category int
)
WITH (
    'connector' = 'datagen'
    ,'rows-per-second' = '100'
    ,'fields.category.kind' = 'random'
    ,'fields.category.min' = '1'
    ,'fields.category.max' = '10'
)
;


INSERT INTO `paimon`.`test_paimon_db`.`test_append_tbl`
SELECT
    id
    ,data
    ,category
    ,cast(LOCALTIMESTAMP as string) as ts
    ,cast(CURRENT_DATE as string) as dt
    ,cast(hour(LOCALTIMESTAMP) as string) as hh
from datagen
;

作业示意图:

cce5172176b4ccc165e6a656b0483472.png

Serverless Spark 交互式查询

Serverless Spark 支持交互式查询和作业提交两种方式,前者可用于快速查询调试,后者提供任务开发、调试、调度和运维等全生命周期工作流程。

在数据写入过程中,我们可以随时通过 EMR Serverless Spark 对 Paimon 表进行交互式查询。

1. 创建 SQL Compute,配置Paimon相关参数。

57d9c926af25570516b9363bafde0cf4.png

spark.sql.extensions                org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions
spark.sql.catalog.paimon            org.apache.paimon.spark.SparkCatalog
spark.sql.catalog.paimon.metastore  dlf
spark.sql.catalog.paimon.warehouse  oss://test/warehouse

2. 启动 SQL Compute,回到任务开发页面,进行交互式查询

56814be6128bbcffbb4464d220b57a0b.png

示例1:

select * from `paimon`.`test_paimon_db`.`test_append_tbl` limit 10;

查询结果:

761de9e6e49e49ca3f4df6e7c0a2a1c5.png

示例2:

select count(*) from `paimon`.`test_paimon_db`.`test_append_tbl` where dt='2024-06-04' and hh='12';

查询结果:

d06b7fce888fe3da7d03dbd9aad48a78.png

Serverless Spark 作业调度

Serverless Spark 还支持作业调度。我们将开发好的任务进行发布,然后创建工作流,编排任务并完成发布工作流。可以配置调度策略,实现定期调度。以下通过该模块实现 Paimon 表的 Compact 调度。

1. 在“任务开发”页面,编写Paimon Compact SQL,完成发布。

873e527dc8c9aa682e06d00ac641eaac.png

CALL paimon.sys.compact (
  table => 'test_paimon_db.test_append_tbl',
  partitions => 'dt=\"2024-06-04\",hh=\"12\"',
  order_strategy => 'zorder',
  order_by => 'category'
)
;

2. 在“任务编排”页面,创建工作流,添加节点,配置成刚发布的任务。

aa1b8c46273528e094e3cdc8802fc017.png

3897515cdbc73736e5eab81c645b5aa2.png

每个工作流节点都可以配置节点专用的引擎版本和 Spark 运行配置。

576a8849ef9323be46b33851d59dcf03.png

该节点我们配置以下Paimon配置。

spark.sql.extensions                org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions
spark.sql.catalog.paimon            org.apache.paimon.spark.SparkCatalog
spark.sql.catalog.paimon.metastore  dlf
spark.sql.catalog.paimon.warehouse  oss://test/warehouse

3. 手动运行工作流。

612832eb62bf54af1eb984389dc80782.png

4. 验证。在工作流的作业调度执行成功后,我们可以通过 SQL Compute 查询 Paimon 的 files 系统表,快速得到 Compact 前后文件的变化。

示例,查询 dt=2024-06-04/hh=12 分区的文件信息:

SELECT file_path, record_count, file_size_in_bytes FROM `paimon`.`test_paimon_db`.`test_append_tbl$files` where partition='[2024-06-04, 12]';

查询结果(Compact 前):

119fcda58351b398a81df3f49025732c.png

查询结果(Compact 后):

56dac364098dd2324b6c14f5245797fc.png


总结

本文演示了使用实时计算 Flink 版和 Serverless Spark 产品快速构建 Paimon 数据湖分析的流程,包括数据入湖 OSS、交互式查询,以及离线 Compact。Serverless Spark 完全兼容 Paimon,通过内置的 DLF 的元数据实现了和其余云产品如实时计算 Flink 版的元数据互通,形成了完整的流批一体的解决方案。同时支持灵活的作业运行方式和参数配置,能够满足实时分析、生产调度等多项需求。


EMR Serverless Spark 在 2024年5月正式开启公测,在公测期间可以免费使用最高 100 CU 计算资源,欢迎试用。

如果您在使用 EMR Serverless Spark 版的过程中遇到任何疑问,可钉钉搜索群号58570004119咨询。

相关链接

  1. EMR Serverless Spark 版官网:
    https://www.aliyun.com/product/bigdata/serverlessspark

  2. 产品控制台:
    https://emr-next.console.aliyun.com/

  3. 产品文档:
    https://help.aliyun.com/zh/emr/emr-serverless-spark/

  4. 快速入门:
    https://help.aliyun.com/zh/emr/emr-serverless-spark/getting-started/get-started-with-sql-task-development

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值