深度 | 数据湖分析算力隔离技术剖析

简介: 随着越来越多的企业开始做数据湖分析,数据量的持续增加,数据分析需求也会越来越多,在一个共享的数据湖分析引擎,如何防止多租户之间的查询相互影响是一个很通用的问题,本文以阿里云DLA Presto为例,介绍了一种基于实时惩罚机制实现算力隔离的原理,能有效使共享Presto集群解决多租户之间查询相互影响的问题。

一、背景介绍

 

根据MarketsandMarkets市场调研显示,预计数据湖市场规模在2024年将从2019年的79亿美金增长到201亿美金。随着数据湖的规模增长,基于交互式查询引擎Presto的数据湖分析负载也随着增加。在共享的Presto集群里,大查询之间非常容易相互影响,在此背景下对查询进行算力隔离也就迫在眉睫。本文主要介绍数据湖分析引擎Presto如何解决多租户算力隔离的技术。

 

二、数据湖分析Presto算力隔离遇到的挑战

 

1、数据湖分析Presto方案架构

Presto是一个定位大数据分析领域的分布式SQL查询引擎,适合GB到PB级别的数据的交互式分析查询。与Hive、Spark等其他查询引擎不同,它是一个全内存计算的MPP引擎,能快速获取查询结果,因此它特别适合进行adhoc查询、数据探索、BI报表、轻量ETL等多种业务场景。下图以阿里云数据湖分析(简称DLA)的Presto架构为例说明。


image.png

  • FrontNode:整个架构的接入层FrontNode,它通过MySQL协议提供服务,只要兼容MySQL协议的客户端、BI工具可以直接连接并提交查询,它接收到SQL后,会对SQL做解析,转换为Presto风格的SQL,并调度到相应的Presto集群。
  • Presto引擎:中间的Presto计算引擎,适合交互查询,用户可以根据业务特点,如果是频繁类型的查询,适合选择独享集群;若是偶发类型的查询,适合Serverless类型的共享集群。
  • 元数据:左侧是统一元数据,相对Presto原生的元数据,它能统一管理所有Connector的元数据,并支持多租户的权限控制;并提供了MySQL风格的GRANT/REVOKE机制,便于租户内的子账户权限管理。
  • 存储层:底层是存储层,Presto并不自带存储,但它支持许多的数据源,并支持不同数据源之间的关联查询。

 

2、数据湖分析Presto算力隔离遇到的挑战

社区原生的Presto在多租户隔离场景考虑的比较少,主要通过ResourceGroup机制限制每个资源组的资源(包括CPU和内存)上限,它最大的问题是只能限制新的查询,即一个Group的资源用超后,其新提交的查询会被排队,直到其使用的资源降到上限之下;对于正在执行的查询如果超过资源组的资源上限,ResourceGroup不会做限制。因此在一个共享的Presto集群中,一个大查询还是可以把整个集群的资源消耗完,从而影响其他用户的查询。在DLA实际生产过程中,上千用户共享的集群,此问题尤为突出。

 

与Spark、Hive等其他查询引擎可以简单设置执行资源并发限制资源不同,Presto首先需要预先启动所有Stage,并且所有查询在Worker执行时共享线程和内存,因此无法通过简单地设置执行的并发控制其资源的使用。

 

业界采用比较多的解决方案是:基于Presto On Yarn实现资源隔离。为每个资源组启动一个独立的Presto On Yarn集群,并通过Yarn的资源管理机制实现Presto集群之间的隔离。其优点是资源隔离比较好;但需要预先为每个租户启动一个专属的集群,即使没有查询在执行也需要维护该集群,在数据湖分析Serverless服务场景,租户较多,且他们的查询很多都是间歇性的,其资源消耗也不稳定,无法预估。因此如果为每个用户都启动一个专属集群,会导致严重的资源浪费。

 

三、基于实时惩罚机制实现DLA Presto的算力隔离技术解析

 

1、社区Presto的Query执行与调度原理

下面以一个聚合类型的查询为例简要介绍社区Presto的Query(查询)执行原理。

 

Select id, sum(money) from employ where id>10000 group by id;

注:*左右滑动阅览


image.png

一个查询会被解析为包含多个Stage的物理执行计划,每个Stage包含若干Task,Task会被Coordinator调度到Worker上执行。在Worker上,每个Task会包含多个Driver,每个Driver对应一个Split(数据切片);每个Driver会包含若干操作算子Operator。

 

它在Presto上的调度逻辑如下图所示,在主节点Coordinator和从节点Worker都有相应的调度逻辑。

image.png

在Coordinator上,主要负责多租户Group之间和Group内的Query调度。若Group使用的资源未达到上限,则Query会被解析并调度。Query解析后,以Task为单位,一次性把所有Stage的Task分配给Worker。

 

Worker会根据数据切片Split生成Driver,并放到调度队列。Worker执行Split以时间片为单位,一次最多只执行1秒,未完成则继续放入排队队列。

 

2、基于实时惩罚机制的核心思想

 

数据切片Split的执行基于CPU时间片可以做进一步的限制:实时统计每个Group消耗的CPU时间,当Group累计每秒消耗的CPU时间超过其配置的资源上限,则开始惩罚该Group,即不再执行其Split,直到其累计CPU消耗小于资源上限。

 

举例的描述:GroupA的配置可使用的CPU核数上限为N,Coordinator每秒为GroupA生成N秒的CPU时间片,当GroupA的查询执行时,实时统计GroupA的CPU消耗,其每秒的CPU消耗为cpus,累计消耗为Csum,每秒都需要让Csum加上cpus,然后做如下的判断逻辑:

 

  • 如果 Csum <= N:下一秒不需要惩罚;并重置Csum = 0。
  • 如果 Csum >= 2N,需要惩罚1秒,下一秒GroupA的所有Split都不会被调度执行;并设置Csum = Csum - N。
  • 如果 N < Csum < 2N,下一秒不会被惩罚,但Csum-N的值会进入下一秒的判断逻辑,下一秒被惩罚的概率会加大;并设置Csum = Csum - N。

image.png

上图以N=3为例举例说明:

 

  • 第一秒 cpus=2,Csum=2;下一秒不惩罚。
  • 第二秒 cpus=5,Csum=5;下一秒不惩罚。
  • 第三秒 cpus=4,Csum=6;下一秒惩罚。
  • 第四秒 cpus=0,Csum=3;下一秒不惩罚
  • 第五秒 cpus=7,Csum=7;下一秒惩罚。
  • 第六秒 cpus=0,Csum=4;下一秒不惩罚。
  • 第七秒 cpus=5,Csum=6;下一秒惩罚。
  • 第八秒 cpus=0,Csum=3;下一秒不惩罚。
  • 第九秒 cpus=3,Csum=3;下一秒不惩罚。

 

3、基于实时惩罚机制实现DLA Presto的算力隔离的实现原理

 

鉴于DLA的Presto已经实现了Coordinator的高可用,一个集群中包含至少两个Coordinator,因此ResourceManager模块首先需要实时收集所有Coordinator上所有Group的资源消耗信息,并在ResourceManager中汇总,然后计算并判断每个Group是否需要被惩罚,最终把每个Group是否需要被惩罚的信息同步给所有Worker。如下图所示:

image.png

与社区Presto的Worker把所有Split放到一个waitingSplit队列不同,DLA Presto首先在Worker上引入Group概念,每个Group都会维护一个自己的队列。Worker在调度选择Split时,首先会考虑Group是否被惩罚,如果被惩罚,则不会调度该Group的Split;只有未被惩罚的Group的Split会被选中执行。之后Worker会统计所有查询的资源消耗并汇总到Coordinator,并进入到下一个判断周期。最终达到控制Group算力的能力。

 

四、DLA Presto算力隔离上线效果

接下来以TPCH做测试,验证租户算力隔离效果。测试场景:

  1. 四台Worker,每台配置是4C8G;
  2. 选用TPCH第20条SQL进行实验,因为它包含5个JOIN个,需要使用大量CPU;
  3. 实验场景:四个租户资源上限相同都为8,其中A、B、C各提交一条SQL,D同时提交5条SQL。

image.png

可以看到社区Presto版本由于租户D提交查询多,相应的Split会更多,因此他能分配更多的资源,这对其他用户是不公平的。而在DLA版本中,由于预先为租户D和其他用户配置了相同的资源上限,因此租户D使用的资源和其他用户也是差不多的。

 

下图是8条查询的耗时对比:

image.png

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

 

在DLA的实际生产过程中,为每个用户设置指定的资源上限,并进行比较精准的控制,杜绝了一条或多条查询占用大量的资源,影响其他用户的查询。也不再出现少量查询就把Presto集群搞垮的情况。保证了用户查询时间的稳定性。另一方面,对于那些查询量很大的用户,DLA还提供了独享集群模式,能让查询以更优的性能完成。

 

五、总结

 

随着越来越多的企业开始做数据湖分析,数据量的持续增加,数据分析需求也会越来越多,在一个共享的数据湖分析引擎,如何防止多租户之间的查询相互影响是一个很通用的问题,本文以阿里云DLA Presto为例,介绍了一种基于实时惩罚机制实现算力隔离的原理,能有效使共享Presto集群解决多租户之间查询相互影响的问题。

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mfc链表中的数据如何排序输出_java程序员面试中最容易被问到的18个算法题(附答案!)...

算法是比较复杂又基础的学科&#xff0c;每个学编程的人都会学习大量的算法。而根据统计&#xff0c;以下这18个问题是面试中最容易遇到的&#xff0c;本文给出了一些基本答案&#xff0c;供算法方向工程师或对此感兴趣的程序员参考。1&#xff09;请简单解释算法是什么&#x…

深度解析PolarDB数据库并行查询技术

简介&#xff1a; 随着数据规模的不断扩大&#xff0c;用户SQL的执行时间越来越长&#xff0c;这不仅对数据库的优化能力提出更高的要求&#xff0c;并且对数据库的执行模式也提出了新的挑战。本文将介绍基于代价进行并行优化、并行执行的云数据库的并行查询引擎的关键问题和核…

万物互联、应用现代化、云原生新范式,华为云为数字化转型提供最优解

10月27日&#xff0c;华为云TechWave全球技术峰会&#xff08;应用现代化&#xff09;在广州举办。华为云发布“云原生2.0”新范式&#xff0c;并分享应用现代化、万物互联等最新理念及产品进展。 华为云CTO张宇昕发表主题演讲 华为云CTO张宇昕表示&#xff1a;“云原生新范式…

动态游标for循环_【【动图算法】(动态规划篇):最长回文子串

本周继续做一道动态规划类型的题目&#xff0c;该题是阿里一面的一道算法题。【动图算法】(动态规划篇)&#xff1a;最长回文子串leetcode 5 题&#xff1a;最长回文子串https://leetcode-cn.com/problems/longest-palindromic-substring/给定一个字符串 s&#xff0c;找到 s 中…

企业上云如何对SLS日志审计服务进行权限控制

简介&#xff1a; 日志审计是信息安全审计功能的核心部分&#xff0c;是企业信息系统安全风险管控的重要组成部分。SLS的日志审计服务针对阿里云的多种云产品&#xff08;Actiontrail、OSS、SLB、RDS、PolarDB、SAS、WAF等&#xff09;提供了一站式的日志收集、存储、查询、可视…

分区取模分库分表策略:多表事务分库内闭环解决方案

简介&#xff1a; 当表数据超过一定量级&#xff0c;就需要通过分表来解决单表的性能瓶颈问题&#xff1b;当数据库负载超过一定水平线&#xff0c;就需要通过分库来解决单库的连接数、性能负载的瓶颈问题。本文将阐述在不同情况下&#xff0c;让不同数量级表&#xff0c;在同一…

漫画:什么是“贪心算法”?如何求解“部分背包问题”?

作者 | 小灰来源 | 程序员小灰————— 第二天 —————————————————. . . . . . . .我们回到刚才的题目当中&#xff0c;假设背包的容量是10&#xff0c;有5个商品可供选择&#xff0c;每个商品的价值和重量如图所示&#xff1a;让我们来计算一下每件物品的…

高德 Serverless 平台建设及实践

简介&#xff1a; 高德为什么要搞 Serverless/Faas&#xff1f;是如何做 Serverless/Faas 的&#xff1f;技术方案是什么样的&#xff1f;目前进展怎么样&#xff1f;后续又有哪些计划&#xff1f;本文将和大家做一个简单的分享。 作者 | 邓学祥&#xff08;祥翼&#xff09; 来…

谷歌自研 Tensor 芯片,8核CPU,20核GPU……

作者 | 禾木木 出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09; 10 月 20 日&#xff0c;谷歌在发布会上推出了全新 Pixel 6 和 Pixel 6 Pro 手机。虽然在推出之前&#xff0c;就已经知晓了外观&#xff0c;该说不说这款手机还是很吸引人的。 在这些变化…

云厂商下一块必争之地就是它了!

简介&#xff1a; 继容器编排、AI 工程化之后&#xff0c;全球顶级云厂商都瞄准了这块无人区。 作者 | 太浪 继容器编排、AI 工程化之后&#xff0c;全球顶级云厂商都瞄准了这块无人区。 1 回顾云计算十几年的历史&#xff0c;或者也可以视其为一部“为开发者服务简史”。 …

shell 如何调用多个脚本

简介 这篇文章主要描述如何通过主脚本去调用其他脚本中的方法&#xff0c;调用的过程中可能出现哪些坑&#xff0c;如何避免。 目录 1. 主脚本调用其他脚本的方法 1.1. bash方法 1.2. source方法 2. 避坑技巧 2.1. 路径配置无效 2.2. source变量冲突 3. 总结 1. 主脚本调…

es对已有的索引给主键_ES中对索引的相关操作

写在前面&#xff1a;本文ES版本为&#xff1a;6.4.2(单机)&#xff0c;并安装了head插件&#xff0c;运用postman进行操作。也可以使用head插件在前端浏览器中进行傻瓜式操作&#xff0c;后续会介绍这种方式&#xff01;如果没有安装es和head插件的话&#xff0c;请先安装&…

“华为云-东吴杯”圆满成功,顶尖参赛者推动“智造”场景结构升级

2021年10月9日&#xff0c;“华为云-东吴杯”2021数字化转型创新应用大赛&#xff08;以下简称“华为云-东吴杯”&#xff09;的最终决赛如期上演&#xff0c;给来自创客赛道和企业赛道的顶尖开发者及团队搭建了一个绝佳的舞台&#xff0c;令其充分展示投身数字化转型领域所获得…

云原生下的灰度体系建设

简介&#xff1a; 本篇文章&#xff0c;我们将继续为大家介绍 ASI SRE&#xff08;ASI&#xff0c;Alibaba Serverless infrastructure&#xff0c;阿里巴巴针对云原生应用设计的统一基础设施&#xff09; 是如何探索在 Kubernetes 体系下&#xff0c;建设 ASI 自身基础设施在大…

引用和指针的区别都有什么_C++指针与引用的区别

指针与引用是C中两个很重要的概念&#xff0c;它们功能看过去很相似&#xff0c;就是都是间接引用某个对象&#xff0c;那么我们应该在什么时候使用指针&#xff0c;什么时候使用引用呢&#xff0c;下面请允许我慢慢道来&#xff1a;1.永远不要使用一个指向空值的引用。一个引用…

混合云K8s容器化应用弹性伸缩实战

简介&#xff1a; 混合云K8s容器化应用弹性伸缩实战1. 前提条件 本最佳实践的软件环境要求如下&#xff1a; 应用环境&#xff1a; ①容器服务ACK基于专有云V3.10.0版本。 ②公共云云企业网服务CEN。 ③公共云弹性伸缩组服务ESS。 配置条件&#xff1a; 1&#xff09;使用专有云…

lodop打印不显示页码_Excel|13个Excel打印技巧汇总,打印技巧大全

打印技巧是工作必备&#xff0c;无需理由&#xff01;很多时候大家得不到想要的打印效果&#xff0c;偶尔打印一两张表格&#xff0c;会出现各种状况&#xff1a;标题行不见了&#xff1f;打印范围错了&#xff1f;页眉页脚不对&#xff1f;打印一个内容&#xff0c;总得弄出一…

关于写好文章的3个心法和5点技巧

简介&#xff1a; 技术类文章最需要的是扎实的经验累积、深度思考和精益求精的精神&#xff0c;这些技巧&#xff0c;希望能够锦上添花。 作者 | 双宏 来源 | 阿里技术公众号 我是双宏&#xff0c;负责阿里巴巴内部技术人社区的内容运营&#xff0c;包括每天头条热文专题推荐、…

工商银行分布式服务 C10K 场景解决方案

简介&#xff1a; Dubbo 是一款轻量级的开源 Java 服务框架&#xff0c;是众多企业在建设分布式服务架构时的首选。中国工商银行自 2014 年开始探索分布式架构转型工作&#xff0c;基于开源 Dubbo 自主研发了分布式服务平台。 作者 | 颜高飞 来源 | 阿里巴巴云原生公众号 Dubb…

matlab cell转数组_MATLAB批量修改文件名

评论区旁友建议使用narsort排序而不是直接修改文件名。我觉得相关条件下也可以&#xff0c;所以原文末尾加上了narsot排序法。以下是原文2019-05-09最近实验室小可爱帮忙做实验和记录实验数据&#xff0c;不过新手总有些错误操作&#xff0c;比方说因为忘记修改存储路径导致图片…