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
相关文章
|
13天前
|
Kubernetes 监控 Cloud Native
云原生时代下的应用开发与部署实践
【10月更文挑战第4天】在云原生的浪潮中,开发者和运维人员面临着新的挑战和机遇。本文将通过实际案例,展示如何在云平台上高效地开发、部署和管理应用,同时确保系统的可扩展性和高可用性。我们将深入探讨容器化技术、微服务架构以及持续集成/持续部署(CI/CD)流程的实施策略,旨在为读者提供一套完整的云原生解决方案框架。
|
1天前
|
运维 Cloud Native 持续交付
云原生架构的演进与实践####
【10月更文挑战第16天】 云原生,这一概念自提出以来,便以其独特的魅力和无限的可能性,引领着现代软件开发与部署的新浪潮。本文旨在探讨云原生架构的核心理念、关键技术及其在实际项目中的应用实践,揭示其如何帮助企业实现更高效、更灵活、更可靠的IT系统构建与管理。通过深入剖析容器化、微服务、持续集成/持续部署(CI/CD)等核心技术,结合具体案例,本文将展现云原生架构如何赋能企业数字化转型,推动业务创新与发展。 ####
79 47
|
1天前
|
Kubernetes Cloud Native 持续交付
云计算的转型之路:云原生技术的崛起与实践####
【10月更文挑战第16天】 本文深入探讨了云原生技术在现代IT架构变革中的核心作用,不同于传统概述,本摘要将聚焦于云原生如何促进企业实现敏捷开发、弹性伸缩及高效运维,通过具体案例分析展现其在实际业务场景中的创新应用,揭示这一技术趋势对企业数字化转型的深远影响。 ####
13 2
|
2天前
|
负载均衡 监控 Cloud Native
云原生架构下的微服务治理策略与实践####
在数字化转型加速的今天,云原生技术以其高效、灵活、可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生环境下微服务治理的策略与实践路径,旨在为读者提供一个系统性的微服务治理框架,涵盖从服务设计、部署、监控到运维的全生命周期管理,助力企业在云端构建更加稳定、高效的业务系统。 ####
|
6天前
|
敏捷开发 运维 Cloud Native
云端新篇章:云原生技术的崛起与实践
在数字化转型的浪潮中,云原生技术以其独特的优势成为企业实现敏捷开发、弹性扩展和高效运维的关键驱动力。本文将深入探讨云原生的概念、核心组件及其在不同行业的应用案例,揭示其如何赋能业务创新,引领云计算进入新纪元。
|
2天前
|
Cloud Native 持续交付 云计算
云原生技术在现代软件开发中的实践与挑战####
【10月更文挑战第15天】 本文深入探讨了云原生技术的定义、核心组件及其在现代软件开发中的应用,并分析了企业在实施过程中面临的主要挑战及应对策略。通过案例分析,揭示了云原生架构如何助力企业实现敏捷开发、高效运维和成本优化,同时指出了安全性、人才短缺和多云管理等关键问题,为读者提供了全面的理解和实用的建议。 ####
12 1
|
3天前
|
运维 监控 Cloud Native
云原生架构下,微服务治理的艺术与实践####
【10月更文挑战第14天】 在数字化转型的大潮中,云原生技术以其高效、灵活与可扩展性成为企业IT架构的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务治理的策略与实践,揭示了如何通过精细化管理提升系统的响应速度、稳定性和可维护性。不同于传统的摘要概述,本文摘要旨在直接触及读者关注的核心——即如何在复杂多变的云环境中,实现微服务的高效协同与治理,为读者提供一个清晰的行动指南。 ####
11 1
|
10天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用开发中的实践与展望
【10月更文挑战第7天】随着技术的不断演进,云计算已从简单的资源租用模式转变为支持复杂、高效、灵活的云原生应用架构。本文将深入探讨云原生技术的核心概念及其在现代应用开发中的应用,通过分析Kubernetes容器编排和微服务架构的实践案例,揭示云原生技术如何推动软件开发的现代化进程。文章旨在为开发者和架构师提供一套实用的云原生应用开发指南,同时展望未来云原生技术的发展方向。
20 8
|
21天前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群的搭建与实践
【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
90 17
|
12天前
|
数据采集 存储 人工智能
AI时代数据湖实践
本文分享了如何利用阿里云的存储解决方案构建一个具备高效处理、高时效性的AI数据湖,通过高吞吐训练和高效推理帮助企业快速实现数据价值,以及用户在使用中的最佳实践。

相关产品

  • 云原生数据湖分析