突破DBMS局限性,阿里借力Spark提升查询性能

  • 时间:
  • 浏览:1

原文发布时间为:2018-11-5

在要我的改进中,MySQL增加了应用进程池、高低优先级等等,要怎样让仍未改变其本质:另有二个 应用进程对应另有二个 查询请求。

MySQL之上有过多过多支持水平拆分的分布式方案,能让数据均匀分摊到多个节点上,从而获得Scale Out的能力。以阿里云DRDS(分布式关系型数据库)为例,DRDS支持分布式事务、平滑扩容、读写分离、权限管理等特征,架构如下图所示:

通过合理选着Sharding依据 ,大伙儿可不可以在这名 架构上比较好位于理或多或少聚合Join等查询。要怎样让,将会数据量较大,类事遇到难以索引的ad-hoc查询,这名 架构同样力不从心。

今天大伙儿就来谈一谈,要怎样在数据库这名 老生常谈得话题下,借力Spark给数据库带来新的价值。

A:大伙儿目前是直接使用的Spark SQL接口,将会不时需侵入到内部管理。过多过多将会造成的后果是Spark的优化器会再优化一次。不过大伙儿的执行计划将会很具体了,通常Spark优化后依然和预期一样。



Spark是当下最流行的大数据框架,支持编程接口和声明式(SQL)接口,支持批处置任务和流计算任务。它使用Scala编写,支持Java、Scala、Python等语言的编程接口。



Spark SQL则是在Spark RDD API上的二次封装,下图是一段Native API的例子:

Q:Optimizer这层将会收到繁杂查询时需转到Spark计算得话是解析成Spark的logicplan吗?那要怎样跟Spark对接?

从接口上看,计算依据 是对用户透明的,执行引擎自动根据用户输入的SQL来决定是是不是要进行分布式执行,将会时需分布式执行,则将执行计划埋点给Fireworks集群,只需等待的图片 计算完成即可。



 ●  单机并行(SMP):以PostgreSQL为代表,不具备Scale Out能力,也可不可以排除; ●  分布式并行(MPP):以数据仓库和各种大数据框架为代表。

其中,MPP又可不可以根据可不可以做到Worker级的失败容忍,进一步细分成有并是不是:分布式并行和批处置。这二者之间的性能差异将会很小了,更多的是看或多或少方面,类事:业务包含无时需做小时级的查询、生态是是不是完善等。

大伙儿回顾一下MapReduce模型:MapReduce处置繁杂任务时需分成多个MR Stage,每个Stage就有写入中间结果到HDFS,刚刚再被下个Stage读出。就有可是我要持久化中间结果,目的是要达到Worker级的失败容忍,要怎样让这名 代价过于大了点。

Spark RDD模型中,则采用另一套失败容忍方案。

下图过多过多另有二个 例子:

过多多说,MySQL是互联网企业中使用最广泛的数据库。要怎样让MySQL专注于OLTP能力,对繁杂的分析型查询无须在行。为哪几种可不可以可不可以 说呢?

此外也可不可以直接输入SQL,二者无非是是是不是经过Parser的区别。

三、Spark与Spark SQL

中间的思路有时也被称为ROLAP,与此相对的,另有并是不是方案是再次出现查询有并是不是:MOLAP通过对数据进行预建模来加速查询。类事,大伙儿通常选着时间维度、加进去去若干个业务维度,对它们的各种组合依据 预先做好聚合。

阿里云DRDS只读实例中引入了Fireworks引擎,它是大伙儿基于Apache Spark定制的分布式MPP引擎。

对于过多过多的架构,即使增加机器配置,对提升OLAP查询性能也没哪几种显著帮助,将会无法利用多核并行的能力。

Q & A





四、为哪几种用Spark?

实在大伙儿常常把Spark归入Hadoop生态系统中,但事实上Spark无须依赖Hadoop,过多过多将会Spark有并是不是不包含存储,通常和HDFS一起去部署搭配使用。



从上表可不可以看出,Spark SQL足以胜任大伙儿的需求。就有可是我可不可以可不可以 选着Hive等,还有或多或少或多或少技术性、非技术性的考虑,不一定是绝对的,在这里也就不引战了。

从(year, item, city)另有二个 维度枚举出8种组合依据 ,大伙儿对这8种依据 的聚合都进行预先计算,这有时也被形象地称为Data Cube。

DRDS HTAP并可不可以可不可以 引入新的存储,过多过多利用了数据库有并是不是的备库。不同于ETL等数据Pipeline,数据库主备之间的binlog同步波特率非常快,通常在毫秒级别,足以满足绝大每种查询的实时性要求。从备库拉取数据,也是为了保障主库过多增加额外负担、对业务造成影响。

RDD全称是“弹性分布式数据集”,“分布式”意为每个RDD都包含多个分区、分布在多个节点上;“弹性”意为每个分区可不可以容易的被恢复——要怎样让我它的依赖方还在,就可不可以重算来恢复。

二、处置OLAP哪几种的现象

Spark的设计比MapReduce更先进。为哪几种可不可以可不可以 说?

一般处置OLAP有有并是不是思路。最常见的思路是,在业务库之外再拷贝一份数据,搭建数据仓库。大多数数仓都采用分布式MPP架构,MPP全称是Massively Parallel Processing,即大规模并行处置,顾名思义是用多节点并行计算的依据 来加速繁杂查询计算;或多或少人面,数仓大多使用share-nothing架构,数据被分片存储到各个节点上:

但很显然,MOLAP所能计算的查询严格受建模依据 限制,这让它的门槛大大提高。过多过多综合来看,使用的不如ROLAP广泛。

Spark假设所有计算就有选着性的,因而也就可不可以通过重算恢复丢失的分区,处置写HDFS、把数据尽量放到内存,性能得以大大提告。

一、传统数据库的不够

这是由MySQL的整个系统设计决定的,MySQL从最初就被设计为每个请求由单应用进程来处置。就有可是我可不可以可不可以 设计,是将会OLTP查询大多很简单,SELECT多以点查居多,让另有二个 应用进程来处置将会足够了。



大伙儿知道SQL Server是一款技术上和商业上都很成功的产品,这名 次微软选着拥抱Spark大数据生态,实在令人或多或少惊讶。国内的几款产品也丝毫不落后,阿里云的DRDS、腾讯云TDSQL也都其他人推出了与Spark相融合的产品。

查询执行的刚刚,大伙儿沿着Stage的依赖关系从左往右计算即可,类事对于上图,先执行Stage 1、Stage 2(二者可不可以并行),再执行Stage 3。Stage内部管理则以pipeline依据 执行。



刚刚说到,MySQL那样的架构不够以满足大伙儿对繁杂查询的需求。本着透过哪几种的现象看本质的精神,让大伙儿重新审视一下各种DBMS以及大数据的执行依据 ,无非是以下几种:

将会用户查询与预建模匹配,只时需在刚刚聚合结果的基础上再做计算就行了,显然,查询代价大大减少。MOLAP的典型代表是Apache Kylin。





本文来自云栖社区相互企业合作伙伴“DBAplus社群”,了解相关信息可不可以关注“DBAplus社群”。



五、DRDS HTAP的实践

Spark的查询计划包中,像filter、map哪几种算子是可不可以在分区内部管理以pipeline的依据 执行的;但另或多或少算子,类事Join,通常时需在Join刚刚对左右两边的数据都按Join Key做Shuffle,这就愿因 要我执行Join刚刚时需等待的图片 左右所有数据都完成可不可以继续。这名 点被称为Pipeline-breaker。执行计划中,不可处置地会再次出现哪几个Pipeline-breaker,过多过多就也产生了多个Stage,这和MR或多或少类事。



本文作者:傅宇