基于DLF、RDS、OSS支持Delta Lake或Hudi存储机制
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存储机制的湖仓一体架构,架构图如下。

模块 | 对应阿里云产品 | 说明 |
在线数据库 | 准备的入湖数据来源,即数据湖的数据来源。 | |
数据入湖 | 对接在线数据库,管理入湖数据来源。 | |
数据湖存储与管理 | 将在线数据库中的源数据引入数据湖时,OSS会作为数据湖的统一存储,存储机制包含Delta Lake和Hudi两种。同时,DLF采用元数据管理功能管理元数据库和元数据表。 | |
数据湖探索与分析 |
| 对数据湖数据进行分析。 |
前提条件
已开通如下服务或已创建实例、项目:
已开通OSS服务。
更多开通OSS服务操作,请参见开通OSS服务。
已开通DTS服务。
您可以单击此处一键授权,为后续操作MaxCompute项目的阿里云账号授予AliyunDTSDefaultrole角色,授权即表示开通了DTS服务。
已创建RDS MySQL实例。
更多创建RDS MySQL实例操作,请参见创建RDS MySQL实例。假设已创建的RDS MySQL实例如下,所属地域为华东2(上海)。
已开通DataWorks服务。
更多开通DataWorks操作,请参见开通DataWorks。
已开通DLF。
已创建MaxCompute项目(非External Project)。
更多创建MaxCompute项目信息,请参见创建MaxCompute项目。假设已创建的MaxCompute项目名称为
doc_test_prod
,所属地域为华东2(上海)。
使用限制
基于Delta Lake或Hudi存储机制的湖仓一体方案的使用限制如下:
仅华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华南1(深圳)、中国香港、新加坡和德国(法兰克福)地域支持构建湖仓一体能力。
MaxCompute可以部署在与DLF、OSS和RDS不同的地域,但DLF、OSS和RDS必须部署在同一地域。
操作流程
为操作MaxCompute项目的账号授予访问DLF和OSS的权限。
创建RDS数据库,准备入湖数据。
创建OSS存储空间作为数据湖的统一存储路径。
通过创建数据源对接RDS与DLF。
基于DLF创建数据入湖任务,将RDS数据库中的表数据实时同步并回放到数据湖中。
通过DataWorks控制台的数据湖集成界面创建External Project,对数据湖数据进行分析。
步骤一:授予MaxCompute访问DLF和OSS的权限
步骤二:准备入湖数据
基于阿里云RDS构造数据库,并创建表、准备入湖数据。
访问RDS实例列表,在上方选择地域。例如
华东2(上海)
,然后单击目标实例ID。创建RDS数据库账号。在目标实例信息页面的左侧导航栏单击账号管理后,在用户账号页签单击创建账号,并在创建账号面板配置下表所列参数信息,单击确定。
参数名称
说明
样例值
数据库账号
访问RDS数据库的账号。创建RDS数据库时会绑定此信息。
datalake_mcdbuser
账号类型
账号包含如下两种:
普通账号:后续需要绑定至RDS数据库。
高权限账号:无需选择要授权的数据库,拥有实例中所有数据库的权限。
普通账号
密码
账号对应的密码信息。
无
确认密码
再次确认账号对应的密码信息。
无
更多参数解释,请参见创建账号。
创建RDS数据库。在目标实例信息页面的左侧导航栏单击数据库管理>创建数据库,设置如下参数。
参数
说明
数据库(DB)名称
最长63个字符。
由小写字母、数字、中划线、下划线组成。
以字母开头,以字母或数字结尾。
支持字符集
数据库的字符集。
Collate
字符串排序规则。
Ctype
字符分类。
授权账号
设置数据库的所有者,对数据库拥有ALL权限。
备注说明
填写备注信息。
为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存储空间作为数据湖的统一存储路径。
登录OSS管理控制台。
在左侧导航栏,单击Bucket列表,在Bucket列表页面,单击创建Bucket。
在创建Bucket面板填写Bucket名称,例如
mc-dlf-oss
,并选择地域,例如华东2(上海)
后,单击确定。在左侧导航栏,单击文件管理后,在右侧区域单击新建目录并填写目录名,例如
covid-19
,单击确定。
步骤四:在DLF中创建元数据库
通过创建元数据库来管理DLF湖中的数据。
登录数据湖构建控制台,在左上角选择地域,例如
华东2(上海)
。创建元数据库。例如datalake。
在左侧导航栏,选择 ,在数据库页签,单击新建数据库。
在新建数据库对话框,配置相关参数。
参数
描述
示例
所属数据目录
数据存储的数据库目录。
default
数据库名称
目标数据库的名称。
dlf_db
数据库描述
目标数据库的描述信息。
湖仓一体
选择路径
OSS数据路径。格式为
oss://<Bucket名称>/<OSS目录名称>
。oss://doc-test-01/datalake/
单击确定,完成数据库的创建。
步骤五:在DLF上创建并启动入湖任务
由于DLF中数据入湖功能已经停止更新,如果您有数据入湖需求请参考DLF中数据入湖功能停止更新公告。本文采用DataWorks数据集成的方式进行数据入湖操作。
准备RDS MySQL数据源。
在DataWorks中配置MySQL数据源,具体操作请参见配置MySQL数据源。
准备OSS数据源。
在DataWorks中配置OSS数据源,具体操作请参见配置OSS数据源。
创建并执行数据同步任务。
在DataWorks中创建离线同步任务,详情请参见通过向导模式配置离线同步任务。关键配置如下:
网络与资源配置。
参数
说明
来源
数据来源
MySQL。
数据源名称
已创建的MySQL数据源。
资源组
我的资源组
已创建的数据集成独享资源组。
去向
数据去向
OSS。
数据源名称
已创建的OSS数据源。
配置任务。
在配置任务页签填写表和文件名。
参数
说明
表
RDS数据库中已创建的表名。
文件名(含路径)
格式:<OSS中已创建的文件目录名称>/<待导出至OSS的数据文件>。
例如
doc-test-01/datalake/anti.csv
。单击离线同步任务配置页面左上角的
图标保存配置,然后单击
图标运行任务。
DataWorks中任务运行成功后,可在OSS数据源配置路径下查看数据是否导入成功。
OSS数据进行格式转换入湖。
登录DLF数据湖构建控制台,在页面顶部选择地域。
在左侧导航栏单击数据入湖 > 入湖任务管理。
在入湖任务管理页面单击新建入湖任务 > OSS数据格式转换,单击下一步。
在新建入湖任务页面配置相关参数,未提及的参数保持默认,然后单击确定。
参数属性
参数名称
说明
示例
配置数据源
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
在DLF控制台的入湖任务管理页面单击目标任务操作列的运行。
当任务执行进度达到100%时,表示OSS数据格式转换成功。
单击元数据管理 > 数据库页签的目标数据库,在目标数据库的表列表页签查看数据表是否生成。
步骤六:基于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角色的子账号可以操作授权。详情请参见将角色赋予用户。
在DataWorks控制台创建External Project。
登录DataWorks控制台,选择地域为华东2(上海)。
在DataWorks控制台页面左侧导航栏,单击数据湖集成(湖仓一体)。
在数据湖集成(湖仓一体)页面,单击现在开始创建。
在新建数据湖集成页面,按照界面指引进行操作。参数示例如下所示。
表 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
无
单击创建后单击预览。
如果能预览DLF库中表的信息,则表示操作成功。
说明以上是DataWorks控制台创建External Project,如果您需要通过SQL方式创建External Project,请参见使用SQL管理外部项目。
在DataWorks临时查询页面,查看External Project下的表。
命令示例如下。
show tables in ext_dlf_delta;
返回结果如下。
ALIYUN$***@aliyun.com:anti_rds
说明DataWorks临时查询操作,详情请参见DataWorks临时查询。
在DataWorks临时查询界面,查询External Project中的表数据。
说明如果查询结果出现乱码问题,解决方法请参见如何处理编码格式设置/乱码问题导致的脏数据报错?。
命令示例:
select * from ext_dlf_delta.anti_rds;
返回结果: