云原生数据湖分析DLA 2020年年度总结

简介: 主要讲述阿里云数据湖分析DLA 2020年的进展~

一、概述

2020年黑天鹅事件不断出现,疫情给人们的生活也带来了改变。在后疫情时代,伴随着云原生技术的发展,企业寻求更加敏捷、更加灵活的数据分析方案,数据湖刚好满足这核心诉求。有不少同学问笔者,Hadoop与数据湖有啥区别?笔者认为,其一:数据湖分析支持的数据格式包括非结构化与半结构化。虽然HDFS可以存图片,但是一般还是有视频&图片的专门的服务器的,原因存储计算不分离情况下,大数据硬件存图片不经济; 其二:数据湖往往跟云结合更加紧密,因为存储计算分离以后,存储与计算可以单独发展。计算可以跟业务系统错峰调度,再结合不同公司计算任务的差异,可以增强弹性能力。其三:数据湖的技术与数据仓库进一步融合,如Hudi支持数据实时写入、事务与更新。

阿里云云原生数据湖分析DLA,在这样的背景下诞生,历经两年的发展,充分结合 云、Presto、Spark、Hudi等优势,构建出了新一代的大数据方案。目前DLA已经服务了数千客户,不少公司的核心数仓也是基于DLA;DLA也集成在友盟、CDN、DBS(数据库备份)、IOT、QuickBI等产品中,间接服务了数万客户;

我们也重视开源与商业合作,目前,DLA是Apache PrestoDB基金会的代表;与Alluxio达成战略合作,共同构建缓存系统;团队有数位Apache的Committer,一起参与贡献开源社区。


本文主要概述讲述下 阿里云云原生数据湖分析(简称DLA)为了应变分析之大变局,在2020年主要实现的一些事情。数据湖分析DLA官网链接:https://www.aliyun.com/product/datalakeanalytics

云原生数据湖分析的基本架构如下:  

image.png

DLA分为DLA Meta、DLA Lakehouse、DLA Presto、DLA Spark 四大模块。在20年我们重写了元数据模块,增加了元数据与数据源之间的同步模块,针对OSS可以发现元数据,简化用户的配置管理;在数据管理Lakehouse方向上支持了RDS MySQL实时同步到Hudi,目前正在产品化中;新增了DLA Serverless Spark模块,支持按照Job计费,重写了接入层,实现了多租户的UI,并且针对OSS做Rename等内核性能优化;DLA Presto改进了扫描版的稳定性,增强内核性能,实现了CU版本的产品形态,并且保持扫描量版本与CU版本统一架构。接下来分模块讲述:


二、DLA Meta

image.png

(开放服务)

OpenAPI

0SS

库,表,列(不返回STS&JDBCUser/Password)

数仓

库,表,列

多租户(通过用户UID区分)

DLAPresto

SLS

(带权限

自动

投递

大分区表秒级变更

KMS加密

维护

DLASpark

UDF

View

Shema

Meta

0SS

数据

变更

Partition

Table

多库解决扩展性问题

OTS

STS

User/Password

RDS&PolarDB

DB

OSS

DB

对比开源的Hive元数据,DLA Meta是兼容Hive meta的,支持云上15+种数据数据源(OSS、HDFS、DB、DW)的统一视图,引入多租户、元数据发现等能力。DLA Meta追求边际成本为0,免费提供使用的。

  • 企业级权限管理支持多账号的权限与隔离,可以简单的GRANT&REVOKE对子账号赋予权限,Meta会托管OSS与DB赋予的权限,DLA Presto与DLA Spark通过内部的API拿到相应的权限,访问OSS与DB数据库;
  • 开放访问:通过OpenAPI可以直接拿到Meta的信息,客户自建的Spark集群也可以使用DLA Meta;
  • 扩展性强:MetaServer是无状态的服务,可以扩展多个集群;在元数据存储采取的是多库存储,可以无限扩展;
  • 元数据发现:支持OSS 数仓模式发现,SLS投递到OSS数据发现,OTS元数据自动同步。支持客户一键发现元数据,这些元数据也会自动维护。 典型的场景是:用户的APP可以不断往OSS写新的Partition,元数据发现服务会自动同步Partition。


三、DLA Lakehouse

数据湖有着巨大的低成本、扩展性的优势。但是在数据组织与维护方面,天然比数仓有着不足。不少客户通过代码维护一套数仓体系:基本流程为准备数据,再通过Spark&Hive清洗,构建离线的数据仓库。 DLA目前在基于Apache Hudi实现DLA Lakehouse,主要目标是提供高效的湖仓,基本的架构图如下图所示:

image.png

增量数据源

特性

TiMeTravel

生命周期管理

超大分区

冷热分离

Compaction

ACID

DLAMeta

Serverless

计算与分析

Schema

接入层

mongoDB

MySQL

Table

Table

DLA

SOLServe

Spark

HBSE

DeltaLog(Chagelog,Meta......)

全量

PtSOL

OTS

FIleGroup

FIleGroup

POLARDA

增量

Data(Parquet)

Data(Parquet)

Presto

日志枚据

Log(Avro)

清洗

Avro

Log

Log(Avro)

Log

Avro]

Load

LogServicekafka

EB级别

0SS

此模块已经有不少客户使用,目前还缺乏产品化,是以方案提供。在接入层已经支持RDS MySQL通过DTS实时写数据到Lakehouse中,接入层全量&增量模块均是直接调用DLA Serverless Spark服务。

  • 实时写入:支持 MySQL数据延期10分钟直接写入到OSS的,写入后,可以支持DLA Serverless Presto与DLA Serverless Spark访问。
  • 自动合并小文件:支持小文件的自动合并,接入层对接的是DLA Serverless Spark服务,目前也正在研发弹性的Compaction机制。
  • 支持多库多表:相对于社区支持单库单表,我们可以一次性把RDS MySQL实例内所有的库与表实时同步到OSS上,并一条链路支持超过5000+张表的同步;

目前Lakehouse发展比较快,内核模块Hudi我们也在跟社区保持紧密的合作,DLA也在加紧产品化中,提供在产品界面点按钮就可以使用的体验,并且不断优化数据源到链路到格式的性能;


四、DLA Serverless Presto

DLA Serverless Presto是基于Apache PrestoDB的研发的,主要是做联邦交互式查询与轻量级ETL,2020年改造后架构如下:

image.png

分时弹性

Presto接入层

共享集群

独享集群

ResourceManager

ResourceManager

sQLMAnaGeR

SQLManaGeR

Master

Master

Worker

Worker

Worker

DLA

Worker

Worker

Worker

Meta

资源隔离

资源隔离

资源隔离

ResultCache

ResultCache

ResultCache

辅助数据

辅助数据

辅助数据

ResulCache

ResultCache

ResultCache

算子下推

算子下推

算子下推

辅助数据

辅助数据

辅助数据

DataCache

DataCache

DataCache

算子下推

算子下推

算子下推

5Gbps

5Gbps

15Gbps

CloudDisk

CloudDisk

CloudDisk

10Gbps

10Gbps

OSs

DB

  • 提供独享集群:在扫描量情况下,客户不好评估成本,需要财务固定成本;一些如Cache、访问Hive、UDF等在扫描量无法实现;DLA推出了Presto独享集群版本。独享版本的资源是独享的,财务成本基本固定的(独享集群也可以按时弹性),比较适合大客户使用。扫描量版本比较实现查询频率比较低的客户使用。在独享集群版本中,我们核心提供了 如下能力:
  • DataCache:与Alluxio合作共同推出了DLA Presto的DataCache,具体机制参考:https://developer.aliyun.com/article/781291,在IO密集类型中,查询性能可最高提升10倍;
  • 分时弹性:扫描量是按照Query计费的,在独享集群下,也是可以弹性的。分时弹性就是用户可以设置时间段来付费;
  • 特有的数据源:如支持Hive等数据源等、Cassandra等数据源;
  • 更快的性能提升:目前也在实现如Query Result Cache、Fragment Result cache、针对性算子下沉;
  • 支持更多的连接器:过去一年我们新增支持了Hive、HDFS、KUDU、OTS ParallelScan、Cassandra、ElasticSearch、ADB PG、Oracle、Druid等;
  • 稳定性改进:接入层打通底层ACK弹性调度、DLA网络管控、SLB管控等链路,实现被动宕机时从之前3分钟到3秒内快速恢复,主动业务发布时只中断1次连接、并在1s左右迅速实现连接切换等能力; Multi-Master实现CoordinatorWorker的优雅关闭,关闭时会等待所有SQL执行完,同时又不接受新SQL,使得我们在升级的时候从之前的用户SQL全挂,到现在用户的SQL可以不被影响,做到客户无感升级;算力租户隔离可以实时控制每个用户的算力,算力过度使用时会实时惩罚的机制,解决了大SQL会导致整个集群过载的问题;
  • 易用性SQL诊断界面,我们也在不断改进,也是接下来的重点改进方向。

未来,我们将充分与社区结合互补,不断提升性能,支持更多的功能,提供更加方便的诊断工具,做到云上的第一的联邦交互式查询引擎;


五、DLA Serverless Spark

Spark是最流行的大数据计算引擎,DLA支持Spark主要是为在湖上做大规模的ETL,并支持流计算、机器学习;比传统自建Spark有着300%的性价比提升,从ECS自建Spark或者Hive批处理迁移到DLA Spark可以节约50%的成本;DLA Spark架构如下图所示:image.png

SparkJobManager统一接入层

U服务

1000CU

1分钟300节点弹性

Driver

MetaCache

按照实际使用弹性

弹性Executor

弹性Executor

弹性Executor

1分钟300节点弹性

RDD

RDD

RDD

Meta

Shuffle

Shuffle

Shuffle

5000个

MetaCache

MetaCache

MetaCache

节点

24:00

00:00

CloudssDDisk

CloudssDDisk

CloudSsDDisk

(TempData)

(TempData)

(TempData)

Ii

OSS

DB

  • 完全支持开源的Spark语法,独享的运行环境:DLA Serverless Spark完全兼容开源的Spark语法,支持Python专享的运行环境,支持开源的算法框架;
  • 弹性,每Job每计费:传统的Spark都需要用户事先购买好集群,DLA支持无需购买任何的计算资源即可开箱使用Spark,兼容开源Spark所有的语法;
  • 重写Serverless Spark接入层,保障Job的稳定性:对比Livy接入层,Livy存在较多的稳定性问题,比如:不能互相扩展,有单点问题,无法在DLA多租户环境应用;为此,DLA Spark组完全重写了Spark的接入层,力求保障长job的稳定性,深度结合云原生的环境。
  • 实现多租户的UI服务:DLA Serverless Spark运行完成后,其UI数据会存放在用户OSS空间,DLA提供多租户SparkUI服务,开源查询正在运行中及运行完成的Spark信息,此服务完全免费
  • 多数据源,针对OSS数据源优化:  目前DLA Serverless Spark支持对接Kafka、LogHub等数据源,直接对接HDFS、HBase、OTS、PolarDB、ADB等几乎所有的数据源的分析与回写。并针对OSS数据源支持MetaCache与Rename等优化,在小文件较多的情况,比开源版本提升50%的性能。

目前DLA Serverless Spark一直追求更加弹性的服务跟开源使用体验尽量一致,接入层的服务会更加稳定性,PS:得益于先进的云原生架构,目前UI服务与接入层服务是免费的。用户只需要为实际的资源消耗付费。


六、数据平台的演进

DLA致力于帮助客户构建低成本、简单易用、弹性的数据平台比传统Hadoop至少节约50%的成本。具体到大数据架构,业内大数据架构有Lambda、Kappa等,目前在大公司应用基本是混合体,大数据与业务是比较强相关,随着公司规模大小不一,适用的场景不近相同,且又随着业务的发展需要不同的大数据的架构,目前还不存在包打天下的银弹(不过每个组件都想扩展场景,替换其它组件的地盘),如果规模不小的公司只有一个肯定会有损耗或者不是最佳的方案架构。一般随着公司规模发展,有如下趋势(此图挑选业内比较流行的组件):

image.png

方案四,摊开细节一点如下,在结合阿里云OLAP团队的组件:

image.png

实时

交互式

数据开发平台

DMSIDataWorks数据调度/数据血缘

离线

专题集市数据仓库

实时数据处理

数据源

DTSCDC

数据应用

实时

实时数据集成

DLA

SparkStreaming

联邦分析

CK&ADB

APP

云Kafka

开源实时OLAP

交互式分析

单表性能高

业务库

可视化

Hudi

APP应用

ACID增量数据

HBaselLindorm

DLA

宽表数据

DLALakehouse

物联网I0T

批量

BI报表

Presto

DLASpark

联邦查询

加工处理

自助分析

HDFS

HBase&

DLAMeta

Lindorm

查询离线数据湖

OSS

MySQL

离线数据湖

直接查询业务库

上图中分为七块,也是目前业内主流的数据处理模式:

  • 数据源:一般是数据产生的系统,比如事务性的数据会直接存入MySQL,物联网一般直接写入到HBase/Lindorm系统之中;
  • 实时数据处理:可以直接对接数据源,如DB CDC或者Kafka,经过流ETL后,写入到数据仓库或者数据湖之中;
  • 离线数据湖:存离线的数据,比如CSV\JSON上传的数据,或者离线数仓的数据;
  • 专题数据仓库:针对高并发的场景加速,一般为业务团队直接持有;
  • 联邦交互式分析:可以跨数据源查询,包括数据仓库、数据湖、数据库的数据;
  • 数据应用:是数据的应用,如BI、营销系统等。
  • 数据开发平台:如计算引擎的调度,数据血缘等;

特别注明的是,Lakehouse(Hudi)会把实时数据与离线数据湖结合起来,并且会融合部分数据仓库的能力。在实际的实践中,Lakehouse也是作为数据湖的一部分,解决数据高效入湖,且支持高效分析。


七、鸣谢与展望2021年

DLA感谢广大客户的信任,目前已经服务数千客户。在2021年,DLA会聚焦在数据湖场景下,从DLA Meta、DLA Lakehouse、DLA Serverless Spark、DLA Serverless Presto方向发力,提供更加实惠,稳定性,弹性,高性能的数据湖服务。DLA Lakehouse会不断优化支持Kafka、Loghub、DB CDC的实时入湖;DLA Presto主打通用格式的交互式查询,会在多数据源算子下沉,Cache等方向发力;DLA  Spark会完全兼容开源Spark的语法与体验,并且在弹性层面不断突破。



相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
7月前
|
数据采集 机器学习/深度学习 存储
数据仓库与数据湖:不同的数据管理方式
在当今数据驱动的时代,数据管理成为了企业发展的关键。数据仓库和数据湖是两种不同的数据管理方式。本文将介绍数据仓库和数据湖的概念及其应用,并分析其优缺点,帮助企业选择适合自身的数据管理方式。
|
存储 数据挖掘 BI
数据平台发展史-从数据仓库数据湖到数据湖仓 1
数据平台发展史-从数据仓库数据湖到数据湖仓
|
7月前
|
Cloud Native 安全 数据管理
阿里云数据湖构建
阿里云数据湖构建
110 0
|
分布式计算 Kubernetes 流计算
Iceberg+Amoro+CloudEon体验云原生数据湖
通过使用CloudEon、Iceberg、Flink、Spark和Amoro,您可以轻松地在Kubernetes上构建一个强大的大数据基础环境。
525 0
|
7月前
|
存储 大数据 BI
数据仓库、数据湖、湖仓一体,究竟有什么区别?
近几年大数据概念太多了,数据库和数据仓库还没搞清楚,就又出了数据湖,现在又说什么“湖仓一体”。乙方公司拼命造概念,甲方公司不管三七二十一,吭哧吭哧花钱搞数据建设。到头来发现,钱也花了,人力也投入了,但最基本的业务需求都解决不了。
|
存储 Cloud Native 数据挖掘
新一代云原生实时数仓 SelectDB(一)
新一代云原生实时数仓 SelectDB(一)
260 1
|
SQL 存储 人工智能
数据平台发展史-从数据仓库数据湖到数据湖仓 2
数据平台发展史-从数据仓库数据湖到数据湖仓
|
监控 Cloud Native 安全
新一代云原生实时数仓 SelectDB(二)
新一代云原生实时数仓 SelectDB(二)
202 0
|
存储 SQL 分布式计算
湖仓一体,Hologres加速云数据湖DLF技术原理解析
本期我们将带来Hologres高性能分析引擎加速查询云数据湖DLF的技术原理解析。
2028 1
湖仓一体,Hologres加速云数据湖DLF技术原理解析
|
存储 SQL 机器学习/深度学习
什么是数据湖引擎
什么是数据湖引擎
385 0