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,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
1月前
|
Kubernetes Cloud Native 安全
云原生架构的演进与实践
随着云计算技术的不断发展,云原生架构已成为现代软件开发的核心趋势。本文旨在探讨云原生架构的演变历程、核心理念及在实际项目中的应用案例。通过对Kubernetes、Docker等关键技术的分析,结合微服务架构的设计原则,本文将揭示如何构建高效、可扩展且易于维护的云原生应用。
50 10
|
21天前
|
Cloud Native 持续交付 开发者
云原生技术在现代企业中的应用与实践####
本文深入探讨了云原生技术的核心概念及其在现代企业IT架构转型中的关键作用,通过具体案例分析展示了云原生如何促进企业的敏捷开发、高效运维及成本优化。不同于传统摘要仅概述内容,本部分旨在激发读者对云原生领域的兴趣,强调其在加速数字化转型过程中的不可或缺性,为后续详细论述奠定基础。 ####
|
11天前
|
Cloud Native 安全 Java
铭师堂的云原生升级实践
铭师堂完整经历了云计算应用的四个关键阶段:从”启动上云”到”全量上云”,再到”全栈用云”,最终达到”精益用云”。通过 MSE 云原生网关的落地,为我们的组织带来了诸多收益,SLA 提升至100%,财务成本降低67%,算力成本降低75%,每次请求 RT 减少5ms。
铭师堂的云原生升级实践
|
1月前
|
运维 Kubernetes Cloud Native
云原生技术入门及实践
【10月更文挑战第39天】在数字化浪潮的推动下,云原生技术应运而生,它不仅仅是一种技术趋势,更是企业数字化转型的关键。本文将带你走进云原生的世界,从基础概念到实际操作,一步步揭示云原生的魅力和价值。通过实例分析,我们将深入探讨如何利用云原生技术提升业务灵活性、降低成本并加速创新。无论你是云原生技术的初学者还是希望深化理解的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
10天前
|
Cloud Native 安全 Java
杭州铭师堂的云原生升级实践
在短短 2-3 年间,杭州铭师堂完整经历了云计算应用的四个关键阶段:从“启动上云”到“全量上云”,再到“全栈用云”,最终达到“精益用云”。也从云计算的第一次浪潮,迈过了第二次浪潮,顺利的进入到了 第三次浪潮 AI + 云。
|
10天前
|
Cloud Native
邀您参加云原生高可用技术沙龙丨云上高可用体系构建:从理论到实践
云原生高可用技术专场,邀您从理论到实践一起交流,探索云上高可用体系构建!
|
21天前
|
Kubernetes Cloud Native API
云原生入门:从理论到实践的探索之旅
本文旨在为初学者提供一个关于云原生技术的全面介绍,包括其定义、核心原则、关键技术组件以及如何将这些概念应用于实际项目中。我们将通过一个简易的代码示例,展示如何在云原生环境下部署一个简单的应用,从而帮助读者更好地理解云原生技术的实践意义和应用价值。
|
23天前
|
运维 Cloud Native 开发者
云原生技术入门与实践
在云计算的浪潮中,云原生技术以其独特的优势和魅力吸引了越来越多的开发者和企业。本文将从云原生技术的基本概念、核心组件以及实际应用三个方面进行详细介绍,帮助读者更好地理解和掌握这一新兴技术。同时,文章还将分享一些实际案例和经验教训,让读者能够更深入地了解云原生技术的应用场景和发展趋势。
37 5
|
1月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
1月前
|
监控 Cloud Native 持续交付
云原生技术在现代企业中的应用与实践
本文将深入探讨云原生技术如何改变现代企业的运作模式,提升业务灵活性和创新能力。通过实际案例分析,我们将揭示云原生架构的关键要素、实施步骤以及面临的挑战,为读者提供一套清晰的云原生转型指南。

热门文章

最新文章

相关产品

  • 云原生数据湖分析