简介: 通过一站式入湖,将不同数据源的数据对立归并到以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 targetUSING (  select recordType, pk, ...  from {{binlog_parser_subquery}}) AS sourceON target.pk = source.pkWHEN MATCHED AND source.recordType='UPDATE' THENUPDATE SET *WHEN MATCHED AND source.recordType='DELETE' THENDELETEWHEN NOT MATCHED THENINSERT *

和传统数仓的binlog入仓相比,基于数据湖的计划具备更大的劣势. 在传统数仓中,为了实现数据库等变更数据的入仓,通常须要保护两张表,一张增量表用于寄存每天新增的数据库变更明细数据,另外一张全量表,寄存历史所有的merge数据,全量表每天和增量表更据主键做merge操作. 显然,基于数据湖计划在实现的简略性和时效性上都更优.

TableStore实时入湖

TableStore是阿里云提供的是阿里云自研的NoSQL多模型数据库,提供海量结构化数据存储以及疾速的查问和剖析服务.它同时反对了通道性能,反对变更数据的实时生产。咱们反对TableStore全量通道、增量通道以及全量加增量通道的实现入湖.其中全量通道蕴含历史全量数据,增量通道蕴含增量变动的数据,全量加增量通道则蕴含了历史全量和增量变动的数据.

SLS日志实时入湖

SLS是阿里云提供的针对日志类数据的一站式服务,次要寄存用户日志数据。将SLS中的日志数据实时归档到数据湖中,进行剖析解决能够充沛开掘数据中的价值。目前通过SLS入湖模板,填写project、logstore等大量信息,即可实现日志实时入湖的能力。

总结瞻望

一站式入湖性能极大的升高了异构数据源入湖的老本,满足了SLS、DTS等数据源入湖的时效性要求,同时也反对了数据源实时变更的能力。通过一站式入湖,将不同数据源的数据对立归并到以OSS对象存储为基础架构的集中式数据湖存储中,解决了企业面临的数据孤岛问题,为对立的数据分析打好了根底.

后续一站式入湖一方面将持续欠缺性能,反对更多类型的数据源,入湖模板方面凋谢更多能力给用户,反对自定义ETL的性能,进步灵活性。另一方面,将会在性能优化方面一直投入,提供更好的时效性和稳定性。

原文链接
本文为阿里云原创内容,未经容许不得转载。