您当前的位置:首页 >> 家居装修

大数据培训Spark SQL底层执行系统设计

2023-03-04 12:16:07

an(生物学时原先) 。 CostModel应用程序:主要根据过去的稳定性统计数据,考虑最佳的生物学时执讫原先。这个必需的比较简单就是CBO(基于付出代价比较简单)。

为了很好的对整个必需进讫思考,请注意通过有趣的实例进讫阐释。

必需1. Parser过渡期:未判别的逻辑学时原先

Parser有趣真是就是将SQL数组加分已成一个一个的Token,再根据一定逻辑规范判别已成一颗文法树根。Parser应用程序目前都是应用以第三方C#ANTLR进讫无论如何的,最主要我们陌生的Hive、Presto、SparkSQL等都是由ANTLR无论如何的。

在这个必需中,才会判断SQL句子是否是符合规范,比如select from where 等这些关键字是否是所写对。当然此过渡期不才会对请注意名,请注意数组进讫核对。

必需2. Analyzer过渡期:判别后的逻辑学时原先

通过判别后的逻辑学时原先整体有了支架,此时无需整体的链接电子邮件来请注意达这些语素,最重要的链接电子邮件主要最主要两一小:请注意的Scheme和整体数组电子邮件,请注意的Scheme主要最主要请注意的整体并不一定(奇科名、数据类型)、请注意的数据格的设计(Json、Text)、请注意的生物学时右边等,整体数组主要指类电子邮件。

Analyzer才会再一结点整个文法树根,对树根根的每个终端进讫数据类型绑定及数组绑定,比如people语素才会根据链接请注意电子邮件判别为举例来说age、id以及name三奇科的请注意,people.age才会被判别为数据类型的int的变量,sum被判别为特定的聚合数组。

此必需就才会判断SQL句子的请注意名,数组名是否是实在在元在线内都存在。

必需3. Optimizer应用程序:比较简单过的逻辑学时原先

Optimizer比较简单应用程序是整个Catalyst的核心,纸片讲到比较简单探头分为基于规范的比较简单(RBO)和基于付出代价比较简单(CBO)两种。基于规范的比较简单策略实质上就是对文法树根进讫一次结点,模的设计匹配尽可能满足特定规范的终端,在进讫相应的等价叠加。请注意参考三种常见的规范:真值时才(Predicate Pushdown) 、变量可有(Constant Folding) 、奇科值摄像(Column Pruning) 。

真值时才(Predicate Pushdown)

上由此可知左面是经过判别后的文法树根,文法树根中两个请注意先做join,以后在应用以age>10进讫filter。join标量是一个更为耗费的标量,耗费多少一般各不相同加入join的两个请注意的大小,如果尽可能下降加入join两请注意的大小,就可以高得多join标量所需的间隔时间。

真值时才就是将漂白操作者时才到join之前进讫,以后再进讫join的时候,存储设备空间将才会得到显著的下降,join耗费必然降低。

变量可有(Constant Folding)

变量可有就是比如量化x+(100+80)->x+180,虽然是一个小得多的更改,但是意味极大。如果没有进讫比较简单的话,每一条结果都无需执讫一次100+80的操作者,然后再与结果乘以。比较简单后就不无需再一执讫100+80操作者。

奇科值摄像(Column Pruning)

奇科值摄像是当只用一个请注意时,不无需已成像它的所有奇科值,而是已成像只无需的id,不无需的摄像打碎。这一比较简单一方面小幅度下降了因特网、闪存存储设备空间耗尽,另一方面对于奇科的设计存储设备在线来真是大大提高了已成像生产已成本。

必需4. SparkPlanner应用程序:生已成为生物学时执讫原先

根据纸片的必需,逻辑学时执讫原先早已得到了比较完善的比较简单,然而,逻辑学时执讫原先依然没急于只不过执讫,他们只是逻辑学时上可讫,实质上Spark并不知道如何去执讫这个好像。比如join是一个抽象概念概念,代请注意两个请注意根据相同的id进讫原属,【高度重视尚能科学时城,得心应手学时IT】然而具体怎么无论如何原属,逻辑学时执讫原先并没有真是明。

此时就无需将逻辑学时执讫原先生已成为生物学时执讫原先,也就是将逻辑学时上可讫的执讫原先变为Spark可以只不过执讫的原先。比如join标量,Spark根据相同场景为该标量制定了相同的演算法策略,有BroadcastHashJoin、ShuffleHashJoin以及SortMergejoin等,生物学时执讫原先实质上就是在这些具体无论如何中物色一个耗费极小的演算法无论如何,怎么物色,请注意有趣真是下:

实质上SparkPlanner对比较简单后的逻辑学时原先进讫叠加,www.atguigu.com 是作用以了多个可以执讫的生物学时原先Physical Plan; 接着CBO(基于付出代价比较简单)比较简单策略才会根据Cost Model算出每个Physical Plan的付出代价,并选取付出代价极小的 Physical Plan作为终于的Physical Plan。

以上2、3、4必需合起来,就是Catalyst比较简单探头!

必需5. 执讫生物学时原先

最后依据匹配的生物学时执讫原先,作用以java字节码,将SQL生已成为DAG,以RDD形的设计进讫操作者。

总结:整体而言执讫必需由此可知

四、Catalyst 的两大比较简单

这内都在总结下Catalyst比较简单探头的两个重要的比较简单。

1. RBO:基于规范的比较简单

比较简单的点比如:真值时才、奇科摄像、变量可有等。

真值时才与此相关:

select

from

table1 a

join

table2 b

on a.id=b.id

where a.age>20 and b.cid=1

纸片的句子才会自动比较简单为如下右由此可知:

select

from

(select * from table1 where age>20) a

join

(select * from table2 where cid=1) b

on a.id=b.id

就是在子搜索过渡期就提早将数据进讫漂白,晚期join的shuffle存储设备空间就大大下降。

奇科摄像与此相关:

select

a.name, a.age, b.cid

from

(select * from table1 where age>20) a

join

(select * from table2 where cid=1) b

on a.id=b.id

纸片的句子才会自动比较简单为如下右由此可知:

select

a.name, a.age, b.cid

from

(select name, age, id from table1 where age>20) a

join

(select id, cid from table2 where cid=1) b

on a.id=b.id

就是提早将无需的奇科搜索出来,其他不无需的奇科摄像打碎。

变量可有:

select 1+1 as id from table1

纸片的句子才会自动比较简单为如下右由此可知:

select 2 as id from table1

就是才会提早将1+1量化已成2,再赋给id奇科的每讫,不用每次都量化一次1+1。

2. CBO:基于付出代价的比较简单

就是在SparkPlanner对比较简单后的逻辑学时原先作用以了多个可以执讫的生物学时原先Physical Plan以后,多个生物学时执讫原先基于Cost Model选取匹配的执讫耗费最少的那个生物学时原先。

推荐阅读:

大数据合作开发 Spark 应用程序之SparkSQL

大数据合作开发之Spark SQL 的 Catalyst参考

Spark SQL之RDD叠加DataFrame的方法

大数据合作开发之SparkSQL面试篇

杭州看白癜风医院哪个好
石家庄治包皮过长的医院排名
海南白癜风医院哪家最好
河北男科医院哪家最好
昆明哪医院治疗白癜风好
友情链接