基于DLF、RDS、OSS支持Delta Lake或Hudi存储机制

更新时间: 2023-08-28 16:29:21

Delta Lake和Hudi是数据湖方案中常用的存储机制,为数据湖提供流处理、批处理能力。MaxCompute基于阿里云DLF、RDS、OSS产品提供了支持Delta或Hudi存储机制的湖仓一体架构。您可以通过MaxCompute查询到实时数据,即时洞察业务数据变化。本文为您介绍如何构建基于Delta Lake或Hudi存储机制的湖仓一体方案。

背景信息

通常,企业构建和应用数据湖需要经历数据入湖、数据湖存储与管理、数据探索与分析过程。MaxCompute基于阿里云DLF(Data Lake Formation)、RDS(Relational Database Service)、OSS(Object Storage Service)产品提供了支持Delta Lake或Hudi存储机制的湖仓一体架构,架构图如下。

image.png

模块

对应阿里云产品

说明

在线数据库

云数据库RDS

准备的入湖数据来源,即数据湖的数据来源。

数据入湖

数据湖构建DLF

对接在线数据库,管理入湖数据来源。

数据湖存储与管理

将在线数据库中的源数据引入数据湖时,OSS会作为数据湖的统一存储,存储机制包含Delta Lake和Hudi两种。同时,DLF采用元数据管理功能管理元数据库和元数据表。

数据湖探索与分析

对数据湖数据进行分析。

前提条件

已开通如下服务或已创建实例、项目:

  • 已开通OSS服务。

    更多开通OSS服务操作,请参见开通OSS服务

  • 已开通DTS服务。

    您可以单击此处一键授权,为后续操作MaxCompute项目的阿里云账号授予AliyunDTSDefaultrole角色,授权即表示开通了DTS服务。

  • 已创建RDS MySQL实例。

    更多创建RDS MySQL实例操作,请参见创建RDS MySQL实例。假设已创建的RDS MySQL实例如下,所属地域为华东2(上海)。image..png

  • 已开通DataWorks服务。

    更多开通DataWorks操作,请参见开通DataWorks

  • 已开通DLF

  • 已创建MaxCompute项目(非External Project)。

    更多创建MaxCompute项目信息,请参见创建MaxCompute项目。假设已创建的MaxCompute项目名称为doc_test_prod,所属地域为华东2(上海)。image..png

使用限制

基于Delta Lake或Hudi存储机制的湖仓一体方案的使用限制如下:

  • 仅华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华南1(深圳)、中国香港、新加坡和德国(法兰克福)地域支持构建湖仓一体能力。

  • MaxCompute可以部署在与DLF、OSS和RDS不同的地域,但DLF、OSS和RDS必须部署在同一地域。

操作流程

  1. 步骤一:授予MaxCompute访问DLF和OSS的权限

    为操作MaxCompute项目的账号授予访问DLF和OSS的权限。

  2. 步骤二:准备入湖数据

    创建RDS数据库,准备入湖数据。

  3. 步骤三:在OSS中创建存储空间及目录

    创建OSS存储空间作为数据湖的统一存储路径。

  4. 步骤四:在DLF中创建元数据库

    通过创建数据源对接RDS与DLF。

  5. 步骤五:在DLF上创建并启动入湖任务

    基于DLF创建数据入湖任务,将RDS数据库中的表数据实时同步并回放到数据湖中。

  6. 步骤六:基于MaxCompute实时分析数据湖数据

    通过DataWorks控制台的数据湖集成界面创建External Project,对数据湖数据进行分析。

步骤一:授予MaxCompute访问DLF和OSS的权限

操作MaxCompute项目的账号未经授权无法访问DLF、OSS服务,您需要执行授权操作。授权方式包含如下两种:

  • 一键授权:当创建MaxCompute项目的账号和部署DLF的账号相同时。推荐您直接单击授权DLF进行一键授权。

  • 自定义授权:当创建MaxCompute项目的账号和部署DLF的账号相同或不相同,都可以使用该方式。详情请参见自定义授权DLF

步骤二:准备入湖数据

基于阿里云RDS构造数据库,并创建表、准备入湖数据。

  1. 访问RDS实例列表,在上方选择地域。例如华东2(上海),然后单击目标实例ID。

  2. 创建RDS数据库账号。在目标实例信息页面的左侧导航栏单击账号管理后,在用户账号页签单击创建账号,并在创建账号面板配置下表所列参数信息,单击确定

    创建账号

    参数名称

    说明

    样例值

    数据库账号

    访问RDS数据库的账号。创建RDS数据库时会绑定此信息。

    datalake_mcdbuser

    账号类型

    账号包含如下两种:

    • 普通账号:后续需要绑定至RDS数据库。

    • 高权限账号:无需选择要授权的数据库,拥有实例中所有数据库的权限。

    普通账号

    密码

    账号对应的密码信息。

    确认密码

    再次确认账号对应的密码信息。

    更多参数解释,请参见创建账号

  3. 创建RDS数据库。在目标实例信息页面的左侧导航栏单击数据库管理>创建数据库,设置如下参数。

    参数

    说明

    数据库(DB)名称

    • 最长63个字符。

    • 由小写字母、数字、中划线、下划线组成。

    • 以字母开头,以字母或数字结尾。

    支持字符集

    数据库的字符集。

    Collate

    字符串排序规则。

    Ctype

    字符分类。

    授权账号

    设置数据库的所有者,对数据库拥有ALL权限。

    备注说明

    填写备注信息。

  4. 为RDS数据库创建表并插入少量测试数据,具体操作请参见通过DMS登录RDS MySQL。如表名为anti_fraud_result,命令示例如下。

    CREATE TABLE `anti_fraud_result` (
      `transactionid` varchar(32) NOT NULL,
      `uid` varchar(32) DEFAULT NULL,
      `card` varchar(32) DEFAULT NULL,
      `longitude` double(12,8) DEFAULT '12.00000000',
      `latitude` double(12,8) DEFAULT '12.00000000',
      PRIMARY KEY (`transactionid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    ;
    
    INSERT INTO `anti_fraud_result` values ("12489571","82005","123123",3.14592040,101.12315432);
    INSERT INTO `anti_fraud_result` values ("12489572","82005","123123",3.14592040,101.12315432);
    INSERT INTO `anti_fraud_result` values ("12489573","82005","123123",3.14592040,101.12315432);
    INSERT INTO `anti_fraud_result` values ("12489574","82005","123123",3.14592040,101.12315432);

步骤三:在OSS中创建存储空间及目录

创建OSS存储空间作为数据湖的统一存储路径。

  1. 登录OSS管理控制台

  2. 在左侧导航栏,单击Bucket列表,在Bucket列表页面,单击创建Bucket

  3. 创建Bucket面板填写Bucket名称,例如mc-dlf-oss,并选择地域,例如华东2(上海)后,单击确定

    创建Bucket
  4. 在左侧导航栏,单击文件管理后,在右侧区域单击新建目录并填写目录名,例如covid-19,单击确定

    创建目录

步骤四:在DLF中创建元数据库

通过创建元数据库来管理DLF湖中的数据。

  1. 登录数据湖构建控制台,在左上角选择地域,例如华东2(上海)

  2. 创建元数据库。例如datalake。

    1. 在左侧导航栏,选择元数据管理,在数据库页签,单击新建数据库

    2. 新建数据库对话框,配置相关参数。

      image..png

      参数

      描述

      示例

      所属数据目录

      数据存储的数据库目录。

      default

      数据库名称

      目标数据库的名称。

      dlf_db

      数据库描述

      目标数据库的描述信息。

      湖仓一体

      选择路径

      OSS数据路径。格式为oss://<Bucket名称>/<OSS目录名称>

      oss://doc-test-01/datalake/

    3. 单击确定,完成数据库的创建。image..png

步骤五:在DLF上创建并启动入湖任务

说明

由于DLF中数据入湖功能已经停止更新,如果您有数据入湖需求请参考DLF中数据入湖功能停止更新公告本文采用DataWorks数据集成的方式进行数据入湖操作。

  1. 准备RDS MySQL数据源。

    在DataWorks中配置MySQL数据源,具体操作请参见配置MySQL数据源

  2. 准备OSS数据源。

    在DataWorks中配置OSS数据源,具体操作请参见配置OSS数据源

  3. 创建并执行数据同步任务。

    在DataWorks中创建离线同步任务,详情请参见通过向导模式配置离线同步任务。关键配置如下:

    1. 网络与资源配置。image..png

      参数

      说明

      来源

      数据来源

      MySQL。

      数据源名称

      已创建的MySQL数据源。

      资源组

      我的资源组

      已创建的数据集成独享资源组。

      去向

      数据去向

      OSS。

      数据源名称

      已创建的OSS数据源。

    2. 配置任务。

      配置任务页签填写表和文件名。image..png

      参数

      说明

      RDS数据库中已创建的表名。

      文件名(含路径)

      格式:<OSS中已创建的文件目录名称>/<待导出至OSS的数据文件>。

      例如doc-test-01/datalake/anti.csv

    3. 单击离线同步任务配置页面左上角的image..png图标保存配置,然后单击image..png图标运行任务。

    4. DataWorks中任务运行成功后,可在OSS数据源配置路径下查看数据是否导入成功。image..png

  4. OSS数据进行格式转换入湖。

    1. 登录DLF数据湖构建控制台,在页面顶部选择地域

    2. 在左侧导航栏单击数据入湖 > 入湖任务管理

    3. 入湖任务管理页面单击新建入湖任务 > OSS数据格式转换,单击下一步

    4. 新建入湖任务页面配置相关参数,未提及的参数保持默认,然后单击确定image..png

      参数属性

      参数名称

      说明

      示例

      配置数据源

      OSS存储路径

      数据源存储的OSS目录。格式为oss://<Bucket名称>/<OSS目录名称>/

      oss:/doc-test-01/datalake/

      存储格式

      来源表的数据格式。

      CSV

      配置目标数据湖信息

      目标数据库

      存储目标表的数据库。

      datalake

      目标数据表名称

      作业会以此名称来建表。

      anti_rds

      存储格式

      目标表的数据格式。

      Delta

      数据湖存储位置

      数据存储的OSS路径。格式为oss://<Bucket名称>/<OSS目录名称>/

      oss:/doc-test-01/dlf/

      配置任务信息

      任务实例名称

      设置入湖任务名称。

      OSS数据入湖格式转换Delta

      最大资源并行度

      DLF将启动Worker节点完成数据入湖,此配置项表示同时运行的最大Worker数量。

      20

    5. 在DLF控制台的入湖任务管理页面单击目标任务操作列的运行

      1. 当任务执行进度达到100%时,表示OSS数据格式转换成功。

      2. 单击元数据管理 > 数据库页签的目标数据库,在目标数据库的表列表页签查看数据表是否生成。image..png

步骤六:基于MaxCompute分析数据湖数据

基于已创建的MaxCompute项目、DLF元数据库、OSS存储空间,创建External Project,用于关联DLF和OSS,并映射至已创建的MaxCompute项目。后续可通过映射的MaxCompute项目对External Project进行数据分析操作。仅MaxCompute项目的所有者(Project Owner)或具备Admin、Super_Administrator角色的用户可以创建External Project。

说明

tenant的Super_Administrator角色可以在MaxCompute控制台的用户管理页签授权。仅主账号或已经拥有tenant的Super_Administrator角色的子账号可以操作授权。详情请参见将角色赋予用户

  1. 在DataWorks控制台创建External Project。

    1. 登录DataWorks控制台,选择地域为华东2(上海)。

    2. 在DataWorks控制台页面左侧导航栏,单击数据湖集成(湖仓一体)

    3. 数据湖集成(湖仓一体)页面,单击现在开始创建

    4. 新建数据湖集成页面,按照界面指引进行操作。参数示例如下所示。

      表 1. 创建数据仓库

      参数

      说明

      外部项目名称

      ext_dlf_delta

      MaxCompute项目

      ms_proj1

      表 2. 创建外部数据湖连接

      参数

      说明

      异构数据平台类型

      选择阿里云DLF+OSS数据湖连接

      阿里云DLF+OSS数据湖连接

      External Project描述

      DLF所在区

      cn-shanghai

      DLF Endpoint

      dlf-share.cn-shanghai.aliyuncs.com

      DLF数据库名称

      datalake

      DLF RoleARN

    5. 单击创建后单击预览

      如果能预览DLF库中表的信息,则表示操作成功。

    说明

    以上是DataWorks控制台创建External Project,如果您需要通过SQL方式创建External Project,请参见使用SQL管理外部项目

  2. 在DataWorks临时查询页面,查看External Project下的表。

    命令示例如下。

    show tables in ext_dlf_delta;

    返回结果如下。

    ALIYUN$***@aliyun.com:anti_rds
    说明

    DataWorks临时查询操作,详情请参见DataWorks临时查询

  3. 在DataWorks临时查询界面,查询External Project中的表数据。

    说明

    如果查询结果出现乱码问题,解决方法请参见如何处理编码格式设置/乱码问题导致的脏数据报错?

    • 命令示例:

      select * from ext_dlf_delta.anti_rds;
    • 返回结果:image..png

阿里云首页 云原生大数据计算服务 MaxCompute 相关技术圈