PrestoCon 2020: 云原生数据湖分析DLA的Presto实践

简介: 阿里云云原生数据湖分析DLA是阿里云在数据湖领域推出的拳头产品,帮忙用户进行数据湖的构建、对数据湖的进行分析、在统一的元数据基础之上支持双引擎: Presto和Spark,一站式满足用户各种数据分析的需求。DLA基于云原生的理念进行构建、用户不需要感知任何物理机、ECS、手动部署等等,直接使用服务,而且是完全Serverless形态,支持灵活的弹性策略,提供多种计费模型,满足各种不同场景的用户使用需求。

阿里云云原生数据湖分析DLA是阿里云在数据湖领域推出的拳头产品,帮忙用户进行数据湖的构建、对数据湖的进行分析、在统一的元数据基础之上支持双引擎: Presto和Spark,一站式满足用户各种数据分析的需求。DLA基于云原生的理念进行构建、用户不需要感知任何物理机、ECS、手动部署等等,直接使用服务,而且是完全Serverless形态,支持灵活的弹性策略,提供多种计费模型,满足各种不同场景的用户使用需求。

在刚刚闭幕的PrestoCon 2020上,阿里云的云原生数据湖分析(DLA)作为Linux Foundation的一员在大会上了分享了DLA在提供托管Presto服务过程中碰到的一些挑战以及我们的解法,这里跟大家分享探讨一下。

image.png

Why Presto


首先给大家介绍一下为什么我们会选择Presto作为我们数据湖分析的引擎。

image.png

首先Presto采用的是全内存计算模型,性能非常的好,特别适合进行adhoc查询、数据探索、BI报表、轻量ETL等等各种业务场景;其次不像其它一些引擎只支持部分SQL语义,Presto支持完整的SQL语义,你不用担心有什么需求是Presto表达不出来的;再者Presto有个很方便的插件机制,你可以在不改动内核的情况下添加自己的插件,这样理论上你可以用Presto去连接任何数据源,满足你的各种业务场景;最后Presto有个非常棒的社区,现在Presto已经归属到Linux Foundation下面,Alibaba也是这个基金会的成员之一,国际国内大公司比如Facebook,Twitter,Amazon Athena,阿里巴巴,京东,头条等等都在使用Presto进行大数据的分析。基于上述优势,阿里云数据湖分析采用了Presto作为底层的分析引擎。

DLA SQL(兼容Presto)的技术架构

image.png
DLA SQL的技术架构分三块:FrontNode,Presto Clusters以及Unified Meta Service。

FrontNode是整个架构的接入层,它实现了MySQL协议,这样用户可以用任何兼容MySQL协议的客户端/BI工具/调度工具连接上来继续数据分析、报表制作。FrontNode会把用户提交的MySQL风格的SQL转换成Presto风格的SQL,并且发送给底层正确的Presto集群。

FrontNode之下,是我们的Presto集群,在每个Region,我们会有两类集群,一个是扫描量集群,对用户收费是按照用户SQL实际从底层数据源扫描的数据量进行收费的,这个集群是公用的,用户之间会通过我们的多租户隔离技术进行元数据和算力的隔离,关于隔离技术的细节后文会详细介绍。另外一类集群是CU集群,CU集群是根据指定的CPU Core的个数单独拉起的集群,它适合于使用频繁的客户,因为它不是按照扫描量计费,而是按照CPU Core个数计费的。这两种集群的收费差异可以看下图:

image.png
关于这两种收费模式更详细的差异对比可以查看我们的文档: 扫描量版与CU版本的差异

在整个架构的左边是我们的统一元数据中心,这个模块是DLA跟社区差异很大的一个地方,在社区的实现里面,所有的Connector连接底层实际的数据源去获取元数据,当用户需要添加新的数据源的时候需要添加新的Catalog文件,并且重启集群才能实现,通过把元数据收到统一服务里面,用户添加新的数据源对于DLA来说只是一个DDL操作,不需要重启集群,并且由于元数据统一在一个地方,使得我们可以很方便地实现权限管控,我们提供了MySQL风格的GRANT/REVOKE机制,这是开源Presto所没有的便利。

托管Presto云服务的三大挑战


托管Presto作为一个云服务有很多挑战,今天我们主要介绍以下三个:

  • Coordinator单点问题
  • 计算资源的多租户隔离
  • Connector优化

Coordinator单点问题


Coordinator单点会有很多问题,一旦Coordinator挂掉整个集群就会不可用很长时间,要等待Coordinator重启,并且注册所有的Worker,这个时间在几分钟级别;另外如果只有一个Coordinator,我们是没有办法做无缝升级的,这些对于一个企业级服务都是不可接受的。我们采用如下架构解决了这个问题:
image.png
我们引入了Zookeeper在多个Coordinator之间选主,其中一个Coordinator会变成Leader,其它则是Follower。Leader Coordinator跟社区的Coordinator职责类似,它负责启动DiscoveryService,负责一些全局信息的收集以及决策工作,同时也会之下分配给它的Query。Follower则比较简单了,只负责执行分配给它的Query。

如果使用开源的Presto的话,有多个Coordinator之后会产生一个问题:用户应该连接哪个Coordinator呢?在DLA的架构里面这不是一个问题,因为DLA的用户不会直接连到Coordinator,只会连接FrontNode,FrontNode负责查询的分发,因此用户完全不感知我们有几个Coordinator。

实现了多个Coordinator之后,要实现无缝升级就比较简单了,如果大家有兴趣我们后续文章可以专门介绍一下。


计算资源的多租户隔离

Presto原生设计是在一个公司内部使用的,对于计算资源多租户隔离考虑的不多,虽然有Resource Group的机制来限定一个Group的计算资源和内存,但是Group对于计算资源的使用是可以超过指定的上限的,Presto做的“限制”是如果有新的查询,那么新的查询不会被调度,但是老的查询还是会继续占用大量资源,这样就会影响一个集群上的其它租户的使用。

DLA对计算资源隔离这块进行了优化,把多租户的概念引入了进去:
image.png

首先与社区Presto所有Split在一个全局队列不同,在DLA的版本里面,每个租户有自己的队列,这样做到第一层的隔离。然后我们在全局引入了一个Resource Manager的角色,它会从所有的Coordinator聚合所有租户对于资源的使用情况,然后根据我们设定的阈值去计算每个租户在下个调度周期是否应该被惩罚,然后把这个惩罚信息发送给所有的Worker。在Worker上,任务调度器在进行实际调度一个租户的Split之前,会先检查这个租户是否被惩罚了,如果被惩罚了,那么它的所有的Split都不会被调度,这样就把计算资源保留给其它的租户使用。

我们用下面的测试配置进行了测试:

  1. 4台Worker,每台配置是4C8G;使用TPCH20G的数据;选用第TPCH第20条SQL进行实验,因为它JOIN了好几个表,需要使用大量CPU。
  2. 实验场景: 4个租户,A、B、C各提交一条SQL,D提交5条SQL。

测试效果如下:
image.png

可以看到在社区版本里面,租户D因为提交了更多了SQL,所以它有更多的Split在运行,挤压了其它租户;在DLA版本里面,所有租户运行中的Split个数是差不多的。

下面看看8条查询的运行耗时:

image.png

可以看到在开源版本里面,所有8条查询耗时几乎一样;而在DLA的版本里面租户A、B、C的查询耗时较短,因为租户D使用过多资源被惩罚了,所以它的5条查询耗时较长。

连接器优化


image.png
OSS是阿里云上的对象存储服务,DLA采用OSS作为数据湖的存储层。我们支持对OSS数据进行INSERT INTO/OVERWRITE以及查询,同时我们对OSS的请求进行了优化,可以把对于OSS API的调用次数降低到开源版本的1/10到1/3。

TableStore是阿里云上广泛使用的KV存储服务,在DLA的帮助下让用户可以使用SQL语句来分析KV存储中的数据,而且如果用户有建立索引的话,DLA会自动采用合适的索引以达到更好的性能。

AnalyticDB是阿里云提供的云原生数据仓库服务,DLA支持用户读写AnalyticDB的数据,可以帮助用户在把数据灌入AnalyticDB之前做一些预先清洗的工作。

对于MaxCompute我们支持读写,并且支持读取MaxCompute的OSS外表的数据。

此外我们支持开源Presto支持的所有的Connector,同时我们也做了一些的优化,比如对于JDBC类数据源,我们支持自动探测底层表结构,然后根据索引列进行Split切分,这样可以提高JDBC类数据源的查询效率。

总结


Presto作为一款优秀的OLAP计算引擎非常适合用来做各种数据分析的工作,不管你是自建的还是采用云上的服务。阿里云数据湖分析在开源社区版本之上提供了多种计费模式以及弹性伸缩的能力,从而可以实现比用户自建更高的性价比;我们支持阿里云上主流的数据源,并且进行深度优化,让用户可以把更多的时间专注下数据分析上;我们提供了更多的稳定性(多Coordinator)与易用性(MySQL协议支持)让各个不同人群可以轻松上手。总之DLA SQL(兼容Presto)的目标是比自建有更高的性价比、按需弹性的算力、开箱即用的体验、方便的数据摄入、MySQL生态带来的简单易用、内置各种优化的Presto分析服务

为了方便中国的Presto用户交流,我们创建了专门的钉钉群,欢迎加入沟通:

presto-cn.PNG

相关实践学习
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
6月前
|
运维 监控 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
国诚投顾携手阿里云,依托Serverless架构实现技术全面升级,构建高弹性、智能化技术底座,提升业务稳定性与运行效率。通过云原生API网关、微服务治理与智能监控,实现流量精细化管理与系统可观测性增强,打造安全、敏捷的智能投顾平台,助力行业数字化变革。
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
|
8月前
|
Kubernetes Cloud Native 安全
云原生机密计算新范式 PeerPods技术方案在阿里云上的落地和实践
PeerPods 技术价值已在阿里云实际场景中深度落地。
|
6月前
|
运维 监控 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
通过与阿里云深度合作,国诚投顾完成了从传统 ECS 架构向云原生 Serverless 架构的全面转型。新的技术架构不仅解决了原有系统在稳定性、弹性、运维效率等方面的痛点,还在成本控制、API 治理、可观测性、DevOps 自动化等方面实现了全方位升级。
|
8月前
|
Kubernetes Cloud Native 安全
云原生机密计算新范式 PeerPods 技术方案在阿里云上的落地和实践
PeerPods 技术价值已在阿里云实际场景中深度落地。
|
4月前
|
人工智能 Cloud Native 算法
拔俗云原生 AI 临床大数据平台:赋能医学科研的开发者实践
AI临床大数据科研平台依托阿里云、腾讯云,打通医疗数据孤岛,提供从数据治理到模型落地的全链路支持。通过联邦学习、弹性算力与安全合规技术,实现跨机构协作与高效训练,助力开发者提升科研效率,推动医学AI创新落地。(238字)
311 7
|
10月前
|
运维 Cloud Native 测试技术
极氪汽车云原生架构落地实践
随着极氪数字业务的飞速发展,背后的 IT 技术也在不断更新迭代。极氪极为重视客户对服务的体验,并将系统稳定性、业务功能的迭代效率、问题的快速定位和解决视为构建核心竞争力的基石。
|
6月前
|
弹性计算 运维 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生Serverless实践
简介: 通过与阿里云深度合作,国诚投顾完成了从传统 ECS 架构向云原生 Serverless 架构的全面转型。新的技术架构不仅解决了原有系统在稳定性、弹性、运维效率等方面的痛点,还在成本控制、API 治理、可观测性、DevOps 自动化等方面实现了全方位升级。
178 1
|
5月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
271 8
|
7月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
397 1
云原生信息提取系统:容器化流程与CI/CD集成实践

热门文章

最新文章

相关产品

  • 云原生数据湖分析