如何基于MaxCompute快速打通数据仓库和数据湖的湖仓一体实践

阿里云云栖号

2021-06-04 18:46阿里云计算有限公司
关注

本文主要分为四个部分:

一、湖仓融合的趋势分析

二、阿里云湖仓一体

三、客户案例分析

四、湖仓一体演示

一、 湖仓融合的趋势分析

现在很多企业说不清楚现有大数据系统是数据湖还是数据仓库,所以先带着大家一起回顾一下。过去20年,整个大数据技术发展的过程,通过这样一个剖析,希望能够让大家理解,数据湖和数据仓库到底是一个什么样的系统,它们是因为什么原因产生的,并且今天我们提的湖仓一体,它出现的一个背景是什么。纵观整个计算机科学技术领域,对于数据处理的技术主要分为四个阶段,数据库阶段、大数据技术探索阶段、大数据技术发展阶段、大数据普惠阶段。

数据库阶段主要是在上个世纪70年代至90年代期间,这个阶段主要是数据库加单机的黄金时代。数据库系统主要是面向操作,面向事务,面向在线业务系统的一个数据系统。其实在90年代左右,数据仓库概念就已经出现了。数据仓库面向的是历史全量数据分析,探查,但因为当时的整体数据量并不大,所以用一些数据库技术的扩展,能够支持当时数据仓库的需求。

2000年左右,随着互联网技术的爆发,我们迎来了大数据时代。在这个阶段,我们用传统数据库的技术是很难满足海量数据处理的需求。大家应该都知道,Google的三篇论文,分布式存储、调度、计算,奠定了整个大数据技术的基础。基本上在同一个时期,2006年出现了Hadoop的系统,阿里巴巴在2009年发展出了飞天系统,包括微软等头部公司都发展出了比较优秀的分布式系统。整个这个阶段,整个大数据的技术,其实是把数据做起来,数据大起来再说。

2010年左右,进入了大数据的一个蓬勃发展阶段,这个阶段是之前我们希望大数据技术从能用转变为好用。这个阶段出现了一系列以SQL表达为主的一些引擎,包括Hadoop体系发展出来Hive、Flink、Presto等一系列引擎。这个时候,逐渐形成了以HDFS为统一的存储,以ORC、Parquet 为开放的文件格式,上面有很多开放引擎为主的一个体系,这个体系像我们今天讲的数据湖系统。这个阶段,Hadoop的本质其实是一个数据湖系统。那数据湖的本质是什么?本质是统一的存储,能够存储原始的数据,能够支持多种计算范式,这就是数据湖的本质。

同一时期,阿里巴巴在飞天系统的基础上发布了 MaxCompute ,Google 发布了Big Query,AWS 发布了Redshift。这几个系统可以称之为大数据时代下的云数据仓库。那云数据仓库系统跟上述Hadoop体系有什么区别呢?云数据仓库并不对外暴露文件系统,暴露的是对数据的描述,用表的方式,用视图的方式暴露出来。存储引擎,计算引擎是被屏蔽在系统里面的,所以存储引擎,计算引擎可以进行深度的优化,然而用户是没有办法感知的。这个阶段可以看出来,整个大数据技术已经开始细分,已经初步的形成了湖的形态和仓的形态。

现在我们所处的这个阶段,也就是2015年左右,我们进入了大数据普惠阶段。这个阶段我们有观察到两个趋势。第一个趋势,大数据技术的发展除了追求规模,性能之外。更多的是看数据安全、数据治理、稳定性、低成本等企业级能力。我们也可以看出来,阿里巴巴 基于MaxCompute ,构建出了非常有阿里特色的数据中台系统。开源体系,也发展出了Atlas和Ranger,主要围绕血缘、治理、安全等开源项目。第二个趋势,随着AI、IOT、云原生技术的发展,对于非结构化数据处理的需求越来越强烈。使用云上对象存储作为统一存储的趋势越来越明显。Hadoop的体系也逐渐由HDFS为统一存储,发展为云上像S3、OSS这样的云存储,做为统一存储的数据湖体系。与此同时,出现了很多数据湖构建,像AWS Lake Formation以及阿里云发布的DLF这样的产品。仓的这条线,也在为了适应这样一个趋势,我们也在跟数据湖做很密切的联动,发展出了外表,通过外表的方式,可以对数据库里面的数据进行联邦计算。

纵观整个20年的发展,随着大数据技术的演进,其实是发展出来了仓跟湖的两种体系。

我们可以用下图这张表来对比一下数据湖跟数据仓库到底有什么区别。

整体上来说,数据湖是一个宽进宽出,相对协同比较松耦合的系统。数据仓库是一个严进严出,比较严格紧耦合的系统。数据湖是数据先进来,然后再开始用,所以是属于事后建模。可以存储结构化、半结构化、非结构化数据。数据湖是提供了一套标准的开放接口,来支持更多的引擎,像插拔式的插到这个体系里面,所以它是向所有的引擎开放。但是这里要注意了,正是因为它是插拔式的这种方式,计算跟存储其实是独立的两套系统。它们彼此之间,其实是不能够相互理解的,也没有办法做到深度的优化。这样其实导致,引擎的优化只能做到适度有限优化。数据湖易于启动,但是随着数据规模的增长,一系列的治理管理的问题出现,后期是比较难以运维的。因为数据湖不做Schema的强一致的数据检查,所以数据治理比较低,难管理使用。因为数据湖的数据是先进来再使用,所以它更适合解决未知的问题,比如探查类的分析,科学计算,数据挖掘等计算处理。

数据仓库在对比维度里基本都是相反的状态,数据仓库是一个严格的系统,所以需要事前建模,数据经过转化清洗进到仓里面,存储类型变为结构化或者半结构化。因为数据仓库是一个相对封闭的系统,是一个自闭环的系统,所以数据仓库向特定引擎开放,但是恰恰因为数据仓库是一个自闭环系统,它的计算引擎、存储引擎、元数据之间是可以做到非常深度、垂直的优化,可以获得一个非常好的性能。数据仓库因为事前建模,数据才能进来,所以难启动,相对来讲启动成本较高。但一旦数据进入数仓之后,整个数据的高质量,方便做治理,这个时候它的整体成本会降低,甚至达到一个免运维的状态。数据仓库的Schema会做强一致的检查,所以数据质量很高,易于使用。所以数据仓库的计算负载天然的适合做离线计算,交互式计算以及BI和可视化。

整体上来讲,数据湖更偏灵活性,数据仓库更偏企业级能力。那么这两种特点对于企业到底意味着什么呢?我们用下面这张图来表示。

横轴是代表企业的业务规模,纵轴是代表企业搭建一套大数据系统所需要的成本。在企业初创的时候,整个业务规模还不大,数据从产生到消费的整个链路,是一个探索和创新的阶段。在这个阶段使用数据湖是非常容易启动,成本也是比较低的。但是随着业务的发展和壮大,参与的人员和部门越来越多,对于数据质量管理、权限控制、成本要求会越来越高。这个时候再使用数据湖,成本是指数级上升。所以这个时候适合用数据仓库,可以做好成本控制、数据质量管理等。从上图可以看出,对于一个企业来讲,在不同的阶段,数据湖和数据仓库都发挥着各自关键的作用。那是否有一种技术或者架构能同时发挥出两者的优势呢?

以阿里云对业界的观察和本身大量的实践,我们认为数据湖和数据仓库正在发生融合。并且它们以各自的方式,向着湖仓一体的方向进行演进。从上图中可以看出,数据仓库到湖仓一体的演进方向,数据湖到湖仓一体的演进方向,两者是相反的,相对的。那么在它们各自的演进上面需要做什么工作呢?

数据仓库是一个严格的系统,所以数据仓库更适合做事务支持,Schema强一致检查和演进,天然支持BI,更容易做实时性。对于数据湖,优势在于数据类型丰富,支持多种计算模式,有开放的文件系统,开放的文件格式,是存储计算分离的架构。

所以数据仓库到湖仓一体的演进,需要从本身拥有的特性发展出数据湖的特性。其实是要跟HDFS、OSS这样的系统做好联动,做好融合,所以数据仓库的结构更偏左右结构。对于数据湖到湖仓一体的演进,是需要更多的站在HDFS、OSS基础上面,来做出强仓的特性。所以数据湖的结构更像一个上下结构。那么,DeltaLake和Hudi其实就是在上下结构当中插了一层,做了一个湖上面的,能够支持强仓的文件类型。

但不管是数据仓库到湖仓一体,还是数据湖到湖仓一体,最终大家演进的这个方向都是一致的,都是湖仓一体。湖仓一体的特性是不变的,四种偏仓的特性,四种偏湖的特性。

二、阿里云湖仓一体

上图为阿里云湖仓一体整体架构,从下往上看,底层是网络层,中间层为湖仓引擎层,在往上是DataWorks 湖仓数据开发层,最上面是业务应用层。我们重点来讲下引擎层,阿里云湖仓一体是左右结构,左边是阿里云数据仓库 MaxCompute,右边是阿里云数据湖 EMR,中间是通过元数据的统一,通过开放格式兼容,以达到数据跟任务可以在数据仓库和数据湖之间的任意流动。在2020年云栖大会上发布的是,对于Hadoop数据湖的支持。近期我们已经支持了OSS 数据湖的湖仓一体。

上图右侧是列出来一些我们近期发布的具体功能点。

1.支持云原生数据湖

MaxCompute 对接了阿里云数据湖构建产品DLF,可以做到元数据的自动发现,做到湖/仓元数据统一存储和管理。

2.对于数据湖查询更好的性能

近期阿里云正在灰度一个功能,智能Cache,此功能可以实现OSS到仓里面智能化的数据分层。MaxCompute 在2020年发布了查询加速功能,未来一个版本我们会把查询加速引擎也投射到数据湖上面,让它能够支持数据湖上面的查询加速。

3.生态开放性

近期已支持Delta Lake开源文件格式。

4.DataWorks 统一的数据开发平台

DataWorks支持多引擎,提供了湖仓一体开发体验。

不管是从上下结构还是左右结构演进过来的湖仓一体,最终都应该是一个简单易用的系统体系。阿里云湖仓一体有四大关键特性,这四大关键特性都是在围绕怎么把数据湖跟数据仓库做到更加易用。

  1. 快速接入

主要有两个层次,一个是网络层,一个是湖仓一体的开通层。MaxCompute 支持云上云下任何环境下Hadoop体系的打通,因为MaxCompute 自有的多租户体系,如何跟特定的一个用户环境打通,技术方面有很大的挑战,我们研发了PrivateAccess网络连通技术,来达到这个目标。第二个关于DataWorks白屏操作自助开通湖仓一体,未来我们会很快发布一个版本,用户在控制台里面就可以很快开通湖仓一体,目前还是需要用工单方式来提交开通。

2. 统一的数据/元数据

其中关键的技术是,有一个Database级别的元数据映射,就是我们可以把数据湖上面的Database映射成MaxCompute 里面的一个Project。数据湖上面的数据不需要移动,就可以让 MaxCompute 像访问操作普通Project一样进行消费。同时做到数据湖和数据仓库的数据/元数据做到实时同步,如果数据湖内的一张表数据或者Schema发生变化,可以及时的反应在 MaxCompute 数仓这一侧。同时 MaxCompute 具备内置的存储跟文件格式,我们也在持续的跟进开源生态内的文件格式,包含上文提到的Delta Lake。

3. 提供统一的开发体验

数据湖和数据仓库本身是两套不同的系统,两个系统有不同的数据库模型的定义,对象模型的定义,我们在MaxCompute 这一侧,把数据湖跟数据仓库的对象模型进行了统一,再加上 MaxCompute 的SQL和Spark是高度兼容社区的,所以我们可以做到作业在两套系统内,无缝迁移。

4. 自动数仓

这条线比较有意思,也是我们近期重点投入领域。我们去年做了一版Cache,主要是根据历史数据做Cache,今年我又做了一版Cache,是能够根据业务场景动态调整的策略智能化Cache,最终是要做到数据可以在数据湖跟数据仓库中智能化的冷热分层。我们的Cache本身需要存储跟计算,要做到深度耦合,所以数仓做这层Cache,可以做到更加的极致。另外,我们还尝试在数据湖的数据上进行打标跟识别,是从数据建模的角度来判定,哪些数据更适合放到仓里面,哪些数据更适合放到湖里面。比如一些结构化被反复访问,比较高频的表数据,更适合放到数据仓库内。如果偏非结构化/半结构化低频的数据,更适合放到数据湖内。最终的目的是为了在性能、成本以及业务效果上达到一个最佳的平衡。

阿里云湖仓一体适合哪些场景?概况起来有三大类。

1.Hadoop集群利旧上云

线下Hadoop上云需要很繁重的数据、任务搬迁,甚至要修改。这时就可以使用湖仓一体,让线下Hadoop跟阿里云 MaxCompute 进行快速的打通,线下的作业不需要修改,不需要搬迁的情况下,可以直接运行到MaxCompute 的系统里面。

2.数据湖ETL/Ad-hoc加速

MaxCompute 作为SaaS模式云数据仓库,具有高性能、低成本以及Serverless能力。通过湖仓一体,是可以把仓的能力投射到湖里面。

3.企业级跨平台的统一大数据平台

企业可以基于湖仓一体的技术,将现有的一个或多个Hadoop甚至OSS湖上的数据,跟 MaxCompute 数仓进行一个打通,最后构建一整套统一的数据开发,统一的管理、治理、调度的数据开发平台。对上层业务提供的是,统一的、透明的中台能力。

三、客户案例分析

案例1、MaxCompute 数仓跟Hadoop数据湖的数仓一体案例业务介绍:

主要做社交媒体领域里的推荐 / 排序、文本 / 图像分类、反垃圾 / 反作弊等。在开源 Hadoop数据湖的基础上,借助阿里巴巴MaxCompute和PAI,解决了超大规模下的特征工程、模型训练等性能问题,形成了MaxCompute 和Hadoop数据湖共存的格局。

痛点:

数据同步安排专人专项负责,工作量巨大;

训练数据体量大,导致耗时多,无法满足实时训练要求;

新写 SQL 数据处理 query,无法复用 Hive SQL 原有 query。

价值:

通过湖仓一体,无须进行数据搬迁和作业迁移,原有生产作业无缝灵活调度MaxCompute 集群和 EMR 集群中,且性能有提升;

封装构建AI计算中台,极大提升该团队的业务支撑能力。

案例2、MaxCompute 数仓跟OSS数据湖的湖仓一体案例业务介绍:

客户广告算法团队是湖仓一体主要客户,主要应用是机器学习DW + MC + PAI + EAS 在线模型服务 。

痛点:

算法团队想更集中在业务和算法上,需要自服务程度高、一站式的机器学习平台;

Hadoop 集群是多团队共用,使用集群管控较严,无法短时间支撑大workload 的创新业务。

价值:

通过湖仓一体将新业务平台与原有数据平台打通,PAI on MaxCompute + DataWorks 为客户创新业务提供敏捷、一站式机器学习模型开发、训练、模型发布,大规模计算能力、EAS 模型发布流程;

起到好的示范作用,并快速复制到其他业务线,高效的支撑了该客户业务的快速增长。

案例3、MaxCompute数仓跟OSS数据湖的湖仓一体案例业务介绍:

丰富的大数据平台建设经验,持续进行平台的迭代升级以满足业务不断发展的需求。从国外某厂商迁移到阿里云后,积极建设和改造数据湖架构。

痛点:

第一代数据湖是 EMR + OSS,公司引入的数据中台的执行引擎和存储是Maxcompute,两套异构的执行引擎带来存储冗余、元数据不统一、权限不统一、湖仓计算不能自由流动。

价值:

将 EMR 的元数据统一到DLF,底层使用 OSS 作统一存储,并通过湖仓一体打通EMR数据湖和MaxCompute数仓两套体系,让数据和计算在湖和仓之间自由流动;

实现湖仓数据分层存储。数据中台对数据湖数据进行维度建模的中间表存储在MaxCompute上,建模的结果表放在数据湖里供EMR或其他引擎消费。

讲师:孙莉莉 阿里云智能 高级技术专家

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

举报/反馈