简介: 通过一站式入湖,将不同数据源的数据对立归并到以 OSS 对象存储为基础架构的集中式数据湖存储中,解决了企业面临的数据孤岛问题,为对立的数据分析打好了根底.
背景
数据湖作为一个集中化的数据存储仓库,反对的数据类型具备多样性,包含结构化、半结构化以及非结构化的数据,数据起源上蕴含数据库数据、binglog 增量数据、日志数据以及已有数仓上的存量数据等. 数据湖可能将这些不同起源、不同格局的数据集中存储管理在高性价比的存储如 OSS 等对象存储中,并对外提供对立的数据分析形式,无效解决了企业中面临的数据孤岛问题,同时大大降低了企业存储和应用数据的老本.
因为数据湖数据起源的多样性,如何简略高效的将这些异构数据源的数据迁徙到中心化的数据湖存储中,是数据湖构建过程面临的问题. 为此,咱们须要提供欠缺的一站式入湖的能力,解决咱们面临的问题,次要包含以下几点:
- 反对异构数据源对立的入湖形式
提供一个简略对立的入湖形式,用户能够通过简略的页面配置实现异构数据源的入湖操作.
- 满足数据入湖的时效性
对于日志、binglog 等类型的数据源,须要实现分钟级提早的数据入湖能力,满足实时交互式 剖析场景对时效性的要求.
- 反对数据源的实时变更
对于数据库、TableStore Tunnel 等类型的数据源,源头数据会常常产生变更,比方数据层面的 update,delete 等操作,甚至 schema 层面的字段构造变更. 须要利用更好的数据格式来反对这类变更行为.
为此,阿里云新推出了 数据湖构建(Data Lake Formation,DLF)服务,提供了残缺的一站式入湖解决方案。
整体计划
数据湖构建的入湖技术计划如下图所示:
数据入湖整体上分为入湖模板、入湖引擎、文件格式以及数据湖存储四个局部:
入湖模板
入湖模板定义了常见的数据源入湖形式,目前次要包含 RDS 全量模板、DTS 增量模板、TableStore 模板、SLS 模板以及文件格式转换 5 种模板.
用户依据不同的数据源抉择相应的入湖模板,而后填写源头相干参数信息,即可实现入湖模板的创立,并提交给入湖引擎运行.
入湖引擎
入湖引擎应用了阿里云 EMR 团队自研的 Spark Streaming SQL 以及 EMR Spark 引擎,Streaming SQL 基于 Spark Structured Streaming,提供了绝对欠缺的 Streaming SQL 语法,极大简化了实时计算的开发成本。对于实时增量模板,下层入湖模板局部将入湖模板翻译成 Streaming SQL,而后提交 Spark 集群运行。咱们在 Streaming SQL 外面扩大了 Merge Into 语法来反对 update、delete 操作。对于 RDS 等全量模板,则间接翻译成 Spark SQL 运行。
文件格式
DLF 反对的文件格式包含 Delta Lake、Parquet、json 等,更多文件格式比方 Hudi 也在接入中。Delta Lake 和 Hudi 等文件格式能很好的反对 update、delete 等操作,同时反对 schema merge 性能。能够很好的解决数据源实时变更问题。
数据湖存储
数据湖数据对立放在 OSS 对象存储中,OSS 提供了海量数据存储的能力,同时在可靠性,价格等方面更具劣势.
一站式入湖计划在很好的解决了后面提的几个问题:
- 反对异构数据源对立的入湖形式
通过模板配置,实现了对立简略的数据入湖形式.
- 满足数据入湖的时效性
通过自研 Streaming SQL 实现了分钟级提早的数据实时入湖,满足了时效性要求.
- 反对数据源的实时变更
通过引进 Delta Lake 等更优的文件格式,实现了对 update、delete 等数据实时变更要求.
实时入湖
随着大数据的一直倒退,用户对数据时效性的要求越来越高,实时入湖也是咱们重点关注的场景,目前咱们曾经反对了 DTS、TableStore 以及 SLS 的实时入湖能力.
DTS 增量数据实时入湖
DTS 是阿里云提供了高牢靠的数据传输服务,反对不同类型数据库增量数据的订阅和生产。咱们实现了 DTS 实时订阅数据的入湖,反对用户已有订阅通道入湖和主动创立订阅通道入湖两种形式,缩小用户配置老本。
在技术上,反对增量数据对历史数据的 update、delete 变更操作,实现分钟级提早的数据变更感知能力。技术实现上在 Streaming SQL 中扩大了 merge into 语法来对接底层文件格式 Delta Lake 的相干接口.
MERGE INTO delta_tbl AS target
USING (
select recordType, pk, ...
from {{binlog_parser_subquery}}
) AS source
ON target.pk = source.pk
WHEN MATCHED AND source.recordType='UPDATE' THEN
UPDATE SET *
WHEN MATCHED AND source.recordType='DELETE' THEN
DELETE
WHEN NOT MATCHED THEN
INSERT *
和传统数仓的 binlog 入仓相比,基于数据湖的计划具备更大的劣势. 在传统数仓中,为了实现数据库等变更数据的入仓,通常须要保护两张表,一张增量表用于寄存每天新增的数据库变更明细数据,另外一张全量表,寄存历史所有的 merge 数据,全量表每天和增量表更据主键做 merge 操作. 显然,基于数据湖计划在实现的简略性和时效性上都更优.
TableStore 实时入湖
TableStore 是阿里云提供的是阿里云自研的 NoSQL 多模型数据库,提供海量结构化数据存储以及疾速的查问和剖析服务. 它同时反对了通道性能,反对变更数据的实时生产。咱们反对 TableStore 全量通道、增量通道以及全量加增量通道的实现入湖. 其中全量通道蕴含历史全量数据,增量通道蕴含增量变动的数据,全量加增量通道则蕴含了历史全量和增量变动的数据.
SLS 日志实时入湖
SLS 是阿里云提供的针对日志类数据的一站式服务,次要寄存用户日志数据。将 SLS 中的日志数据实时归档到数据湖中,进行剖析解决能够充沛开掘数据中的价值。目前通过 SLS 入湖模板,填写 project、logstore 等大量信息,即可实现日志实时入湖的能力。
总结瞻望
一站式入湖性能极大的升高了异构数据源入湖的老本,满足了 SLS、DTS 等数据源入湖的时效性要求,同时也反对了数据源实时变更的能力。通过一站式入湖,将不同数据源的数据对立归并到以 OSS 对象存储为基础架构的集中式数据湖存储中,解决了企业面临的数据孤岛问题,为对立的数据分析打好了根底.
后续一站式入湖一方面将持续欠缺性能,反对更多类型的数据源,入湖模板方面凋谢更多能力给用户,反对自定义 ETL 的性能, 进步灵活性。另一方面,将会在性能优化方面一直投入,提供更好的时效性和稳定性。
原文链接
本文为阿里云原创内容,未经容许不得转载。