云原生数据湖分析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版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
7月前
|
机器学习/深度学习 PyTorch 测试技术
从训练到推理:Intel Extension for PyTorch混合精度优化完整指南
PyTorch作为主流深度学习框架,凭借动态计算图和异构计算支持,广泛应用于视觉与自然语言处理。Intel Extension for PyTorch针对Intel硬件深度优化,尤其在GPU上通过自动混合精度(AMP)提升训练与推理性能。本文以ResNet-50在CIFAR-10上的实验为例,详解如何利用该扩展实现高效深度学习优化。
404 0
|
弹性计算 Java jenkins
开箱即用的企业级CICD工具-云效流水线 Flow
【5月更文挑战第10天】开箱即用的企业级CICD工具-云效流水线 Flow
56303 11
|
存储 大数据 数据安全/隐私保护
Python中的长整型
Python中的长整型
522 0
|
10月前
|
缓存 弹性计算 网络协议
阿里云服务器对接高防的时候可能会出现的问题
本文总结了高防服务使用中常见的六大类问题及其解决方法,包括网络延迟与跨运营商访问异常、安全组配置错误、后端服务器异常、高防服务状态异常、端口协议配置错误及其他常见问题。针对每类问题,文章分析了可能的原因,并提供了具体排查和解决方案,如选择合适防护节点、放行回源IP段、优化服务器性能、调整防护策略等,帮助用户快速定位并解决问题,提升服务稳定性。
|
存储 弹性计算 数据挖掘
阿里云服务器ECS通用算力型u1和ECS经济型e实例性能特点、使用及常见问题解答FAQ
阿里云ECS云服务器的经济型e实例和通用算力型u1实例深受开发者和中小企业青睐。e实例适合中小型网站、开发测试等轻量级应用,采用共享CPU调度模式,性价比高;u1实例则适用于中小型企业级应用,提供更高的性能保障和稳定性,支持固定CPU调度模式,计算性能更稳定。同等配置下,u1实例在网络带宽、IOPS等方面表现更优,价格也相对较高。个人用户可选择e实例,中小企业建议选择u1实例以确保业务稳定性。
547 5
|
Android开发 开发者 Kotlin
告别AsyncTask:一招教你用Kotlin协程重构Android应用,流畅度飙升的秘密武器
【9月更文挑战第13天】随着Android应用复杂度的增加,有效管理异步任务成为关键。Kotlin协程提供了一种优雅的并发操作处理方式,使异步编程更简单直观。本文通过具体示例介绍如何使用Kotlin协程优化Android应用性能,包括网络数据加载和UI更新。首先需在`build.gradle`中添加coroutines依赖。接着,通过定义挂起函数执行网络请求,并在`ViewModel`中使用`viewModelScope`启动协程,结合`Dispatchers.Main`更新UI,避免内存泄漏。使用协程不仅简化代码,还提升了程序健壮性。
500 1
|
数据可视化 安全 测试技术
部署流水线原则与工具设计
部署流水线原则与工具设计
228 1
|
Linux Docker 容器
openEuler 安装 podman 和 podman compose
Podman Compose 是 Podman 的扩展,它提供了与 Docker Compose 类似的功能。如果你的版本中没有包含 Podman Compose,或者你需要单独管理它,你可以尝试从外部仓库安装 Podman Compose。比如:使用 pip3 安装 podman & compose
1643 0
openEuler 安装 podman 和 podman compose
VC++/Qt Creator内存泄漏检测方法(1):_CrtSetDbgFlag与_CrtDumpMemoryLeaks
VC++/Qt Creator内存泄漏检测方法(1):_CrtSetDbgFlag与_CrtDumpMemoryLeaks
2441 0
|
测试技术 调度 Apache
使用 Apache JMeter 调度器的详细指南
Apache JMeter 是开源性能测试工具,用于模拟负载测试。调度器功能允许按预设时间执行测试计划。启动 JMeter,创建测试计划包含线程组,配置线程数、启动时间和持续时间。添加HTTP采样器和监听器来收集数据。保存测试计划并启动,最后分析响应时间、吞吐量等指标以评估系统性能。通过启用调度器,测试可在特定时间段自动化运行。