全部产品
Search
文档中心

开源大数据平台E-MapReduce:基于Flink、EMR Serverless Spark与Paimon构建流批一体数据湖分析

更新时间:Jun 02, 2026

本文演示了使用实时计算Flink版和EMR Serverless Spark构建Paimon数据湖分析流程。该流程包括将数据写入OSS、进行交互式查询以及执行离线数据Compact操作。EMR Serverless Spark完全兼容Paimon,通过内置的DLF元数据与其他云产品(例如,实时计算Flink版)实现元数据互通,形成完整的流批一体化解决方案。它支持灵活的任务运行方式和参数配置,满足实时分析和生产调度的多种需求。

背景信息

实时计算Flink版

阿里云实时计算Flink版是一种全托管Serverless的Flink云服务,是一站式开发运维管理平台,开箱即用,计费灵活。具备作业开发、数据调试、运行与监控、自动调优、智能诊断等全生命周期能力。更多信息,请参见什么是阿里云实时计算Flink版

Apache Paimon

Apache Paimon是一种统一的数据湖存储格式,结合Flink和Spark构建了流批处理的实时湖仓一体架构。Paimon创新地将湖格式与LSM(Log-structured merge-tree)技术结合,使数据湖具备了实时流更新和完整的流处理能力。更多信息,请参见Apache Paimon

操作流程

步骤一:通过实时计算Flink创建Paimon Catalog

Paimon Catalog可以方便地管理同一个warehouse目录下的所有Paimon表,并与其它阿里云产品连通。创建并使用Paimon Catalog,详情请参见管理Paimon Catalog

  1. 登录实时计算控制台

  2. 单击目标工作空间操作列下的控制台

  3. 创建Paimon Catalog。

    通过UI方法添加DLF类型的Paimon Catalog,无需手动填写AccessKey信息。具体操作,请参见管理Paimon Catalog

  4. 创建Paimon表。

    查询脚本文本编辑区域输入如下命令后,选中代码后单击运行

    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'
    );
  5. 创建流作业。

    1. 新建作业。

      1. 在左侧导航栏,选择数据开发 > ETL

      2. 新建流作业,在新建作业草稿对话框中,填写作业配置信息。

        作业参数

        说明

        文件名称

        作业的名称。

        说明

        作业名称在当前项目中必须保持唯一。

        引擎版本

        当前作业使用的Flink的引擎版本。引擎版本号含义、版本对应关系和生命周期重要时间点详情请参见引擎版本介绍

      3. 单击创建

    2. 编写代码。

      在新建的作业草稿中,输入以下代码,通过datagen源源不断生成数据写入Paimon表中。

      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;
    3. 单击部署,即可将数据发布至生产环境。

    4. 您可以在作业运维页面启动作业进入运行阶段,详情请参见作业启动

步骤二:通过EMR Serverless Spark创建SQL会话

创建的SQL会话用于SQL开发和查询。有关会话的详细介绍,请参见会话管理

  1. 进入会话管理页面。

    1. 登录E-MapReduce控制台

    2. 在左侧导航栏,选择EMR Serverless > Spark

    3. Spark页面,单击目标工作空间名称。

    4. EMR Serverless Spark页面,单击左侧导航栏中的会话管理

  2. 在Serverless Spark工作空间的数据目录中,添加步骤一中创建的DLF Catalog。

  3. 创建SQL会话。

    1. SQL 会话页签,单击创建 SQL 会话

    2. 在创建SQL会话页面,配置以下信息,其余参数无需配置,然后单击创建

      参数

      说明

      名称

      自定义SQL会话的名称。例如,paimon_compute。

    3. 单击操作列的启动

步骤三:通过EMR Serverless Spark进行交互式查询或任务调度

EMR Serverless Spark提供了交互式查询和任务调度两种操作模式,以满足不同的使用需求。交互式查询适用于快速查询和调试,而任务调度则支持任务的开发、发布和运维,实现完整的生命周期管理。

在数据写入过程中,我们可以随时使用EMR Serverless Spark对Paimon表进行交互式查询,以便实时获取数据状态和执行快速分析。此外,通过发布开发好的任务并创建工作流,可以编排各项任务并完成工作流的发布。您可以配置调度策略,实现任务的定期调度,从而保证数据处理和分析的自动化与高效性。

交互式查询

  1. 创建SQL开发。

    1. EMR Serverless Spark页面,单击左侧导航栏中的数据开发

    2. 开发目录页签下,单击新建

    3. 在弹出的对话框中,输入名称(例如,paimon_compact),类型选择为SparkSQL,然后单击确定

    4. 在右上角选择数据目录、数据库和前一步骤中启动的SQL会话。

    5. 在新建的任务编辑器中输入SQL语句。

      • 示例1:查询test_append_tbl表中前10行的数据。

        SELECT * FROM paimon.test_paimon_db.test_append_tbl limit 10;
        说明

        请根据实际情况替换SQL中的Catalog名称、数据库名称和表名称。

        返回结果包含 iddatacategorytsdthh 等字段,其中 iddata 列为哈希字符串,category 为数字分类值,ts 为完整时间戳(如 2024-06-24 19:00:00.446),dt 为日期,hh 为小时。

      • 示例2:统计test_append_tbl表中满足特定条件的行数。

        SELECT COUNT(*) FROM paimon.test_paimon_db.test_append_tbl WHERE dt = '2024-06-24' AND hh = '19';
        说明

        请根据实际情况替换SQL中的Catalog名称、数据库名称、表名称和分区条件(dt、hh)。

        查询返回一行结果,count(1) 值为 360000

  2. 运行并发布任务。

    1. 单击运行

      返回结果信息可以在下方的运行结果中查看。如果有异常,则可以在运行问题中查看。

    2. 确认运行无误后,单击右上角的发布

    3. 发布对话框中,可以输入发布信息,然后单击确定

任务调度

  1. 查询Compact前文件信息。

    数据开发页面,新建SQL开发,查询Paimon的files系统表,快速地得到Compact前文件的数据。创建SQL开发的具体操作,请参见SparkSQL开发

    SELECT file_path, record_count, file_size_in_bytes FROM paimon.test_paimon_db.`test_append_tbl$files`;
    说明

    请根据实际情况替换SQL中的Catalog名称和数据库名称。

    查询结果显示 Compact 前共有 14 个 ORC 数据文件,各文件 record_count 大多为 18100(部分为 18200,首行为 8700),file_size_in_bytes 范围约为 1752386~3664183。

  2. 在上述SQL开发(paimon_compact)中输入以下Compact SQL,然后直接发布。

    CALL paimon.sys.compact (
      table => 'test_paimon_db.test_append_tbl',
      partitions => 'dt=\"2024-06-24\",hh=\"19\"',
      order_strategy => 'zorder',
      order_by => 'category'
    );
  3. 创建工作流。

    1. EMR Serverless Spark页面,单击左侧导航栏中的任务编排

    2. 任务编排页面,单击创建工作流

    3. 创建工作流面板中,输入工作流名称(例如,paimon_workflow_task),然后单击下一步

      其他设置区域的参数,请根据您的实际情况配置,更多参数信息请参见管理工作流

    4. 在新建的节点画布中,单击添加节点

    5. 来源文件路径下拉列表中选择已发布的SQL开发(paimon_compact),填写Spark 配置参数,然后单击保存

      参数

      说明

      名称

      自定义SQL会话的名称。例如,paimon_compute。

    6. 在新建的节点画布中,单击发布工作流,然后单击确定

  4. 运行工作流。

    1. 任务编排页面,单击新建工作流(例如,paimon_workflow_task)的工作流名称

    2. 工作流实例列表页面,单击手动运行

    3. 触发运行对话框中,单击确定

  5. 验证Compact效果。

    工作流调度执行成功后,再次执行与开始相同的SQL查询,对比Compact前后文件的数量、记录数和大小,以验证Compact操作的效果。

    SELECT file_path, record_count, file_size_in_bytes FROM paimon.test_paimon_db.`test_append_tbl$files`;

    Compact 后查询结果显示表中仅剩 3 个 ORC 文件:data-c971b2a7-…-0.orc(record_count 144591,file_size_in_bytes 29122164)、data-17d0b4c6-…-0.orc(record_count 179571,file_size_in_bytes 36159348)、data-a8f27c6b-…-0.orc(record_count 35838,file_size_in_bytes 7243404),说明小文件已被合并。