![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
深入浅出Spark SQL原理
文章平均质量分 84
分析spark sql的实现原理,包括:Spark SQL实现的总体流程,dataset的操作,逻辑计划,物理计划的实现分析。
一 铭
公众号:大数据架构师修行之路
展开
-
SparkSQL实现原理-UDF实现原理分析
本文介绍Dataset的UDF的实现原理。UDF是User-Defined Functions的简写。用户可以根据自己的需要编写函数,并用于Spark SQL中。但也要注意,Spark不会优化UDF中的代码,若大量使用UDF可能让数据处理的性能受到影响,所以应该优先选择使用spark的api或sql语句来处理数据。原创 2023-03-12 17:26:20 · 1030 阅读 · 0 评论 -
SparkSQL实现原理-SparkSQL如何支持Hive?
本文介绍了SparkSQL如何支持Hive的访问。原创 2023-03-12 17:14:12 · 809 阅读 · 0 评论 -
SparkSQL实现原理-DataSet缓存的实现
本文介绍了SparkSQL中Dataset缓存的具体实现原理。可见,对于Dataset的缓存只是生成了一个逻辑计划,当执行action算子实际计算数据才会计算并缓存数据。原创 2022-09-02 07:22:44 · 744 阅读 · 0 评论 -
Spark SQL实现原理分析-Dataset的checkpoint的实现
本文介绍了Dataset检查点机制(checkpoint)的实现原理,并对其源码进行了分析。原创 2021-08-20 10:58:49 · 734 阅读 · 0 评论 -
Spark SQL实现原理-逻辑计划优化-Project合并规则:CollapseProject
本文介绍了逻辑计划优化规则:CollapseProject规则的效果和实现原理。该规则可以对多个select操作,或是聚合+select操作时的列选择或运算进行优化。通过这种方式来简化逻辑执行计划,并使得在生成物理计划时产生最优化的代码。原创 2021-08-20 10:54:55 · 771 阅读 · 0 评论 -
Spark SQL实现原理-逻辑计划优化规则:ColumnPruning(列裁剪)规则
本文对逻辑计划优化的列裁剪优化规则进行了分析。该规则会根据各种操作的目标列,对列进行裁剪的逻辑计划优化,并尽可能把这种优化推到数据源处。原创 2021-08-20 10:50:19 · 767 阅读 · 0 评论 -
Spark SQL实现原理-逻辑计划优化:LimitPushDown规则
LimitPushDown优化规则主要实现:把limit操作进行下推,尽量下推到读取数据时。另外,该规则还有一个限制条件,就是当union all和outer join操作 结合limit操作时才生效。LimitPushDown规则的效果4情况1:union+limit的效果我们先进行union操作,然后再使用limit操作进行过滤。var ds1 = spark.range(10).withColumn("col1", 'id+1)var ds2 = spark.range(20).withCo原创 2021-08-03 07:32:11 · 896 阅读 · 0 评论 -
Spark SQL实现原理-逻辑计划优化-操作下推:PushPredicateThroughJoin
Spark SQL实现原理-逻辑计划优化规则:PushPredicateThroughJoin我们在使用join操作时,会设定join的条件,也就是on子句;在完成join后,可能会对join的结果进行过滤操作。PushPredicateThroughJoin规则就是针对这两种情况进行的优化,同样,优化的目的是为了把过滤条件尽量下推到数据源读取时,减少数据传输和join时的数据量,从而提升性能。Spark SQL中的PushPredicateThroughJoin优化规则的实现,借鉴了Hive SQL的原创 2021-07-18 22:08:33 · 542 阅读 · 1 评论 -
Spark SQL实现原理-逻辑计划优化-操作下推:EliminateOuterJoin规则
Spark SQL实现原理-逻辑计划优化-操作下推:EliminateOuterJoin规则该规则对outer join操作进行优化,目的是尽可能的消除outer join操作,把它转化成inner或其他的join类型。EliminateOuterJoin优化规则能够生效的情况是:join操作后面跟一个filter操作(按逻辑计划树的节点组织来说,就是:当filter操作是join操作的父节点时)。EliminateOuterJoin规则的逻辑EliminateOuterJoin优化规则的执行逻辑可以原创 2021-07-15 08:25:55 · 569 阅读 · 1 评论 -
Spark SQL实现原理-逻辑计划的优化-操作下推:PushProjectionThroughUnion
PushProjectionThroughUnion操作下推优化规则的作用是:把在Union操作一边的Projections(投影)操作推到Union的两边。要注意这样优化的前提是在Spark SQL中nion操作不会对数据去重。这里的Projections可以理解为select字段的操作。也就是说,把select操作推到Union操作的两边。优化规则的使用先通过例子来查看和理解一下该优化规则的效果。使用local模式启动spark的scala终端,打开TRACE日志(可以在scala终端中通过sc.s原创 2021-07-10 11:47:26 · 330 阅读 · 1 评论 -
Spark SQL实现原理-逻辑计划优化:操作下推概述
在Optimizer中定义了一个逻辑计划优化规则集,这些集合被分成了几类,其中一类就是操作下推(Operator push down)。操作下推的意思是:把一些操作(比如:filter等)尽量推到接近数据源的位置去计算,这样可以让数据尽早的得到处理,从而可以减少数据的传输,提升处理效率。本文主要对这些逻辑计划优化规则进行介绍,后面的文章会对这些规则进行详细分析。操作下推逻辑计划优化规则在spark-2.4.4中定义了以下几种操作下推的优化规则:PushProjectionThroughUnio原创 2021-07-09 07:34:04 · 497 阅读 · 0 评论 -
Spark SQL实现原理-逻辑计划优化的实现
逻辑计划优化(Logical Optimization)阶段把标准的基于规则(Rule-based)的优化策略应用于已经分析的逻辑计划(Resolved Logical Plan)。说明:为了对总体架构有一个更加宏观的掌握,所以逻辑计划分析规则的实现会在后续逐渐补上,先继续分析总体框架的实现。优化规则的分类逻辑计划的默认优化规则集Optimizer#defaultBatches变量中定义。和逻辑计划的分析规则一样,逻辑计划的优化规则也通过规则集(Batch对象)的方式进行组织,每个规则集包括多个优化规原创 2021-07-06 18:50:36 · 734 阅读 · 0 评论 -
Spark SQL实现原理-逻辑计划分析:ResolveHints规则集
查询提示用来明确提示查询时需要完成的操作(比如:broadcast),通过这种方式来向查询优化器提示如何优化逻辑计划。当查询优化器无法做出最佳决策时,这可能非常有用,例如:当进行join操作缺少一些属性的统计数据时。目前Spark SQL支持:coalesce和repartition,以及broadcast提示。在分析时,所有其他的不支持的提示都会从逻辑计划中删除。提示标识的使用(1)使用系统支持的提示符,比如:在进行join操作时通过broadcast来明确的提示要广播某个数据集,可以通过以下代码来原创 2021-07-04 08:47:14 · 356 阅读 · 3 评论 -
Spark SQL实现原理-逻辑计划分析的实现
从《Spark SQL实现原理-逻辑计划的创建》一文我们知道,通过创建和操作Dataset会创建一个逻辑计划树。但在创建逻辑计划树时有些属性的类型等信息,此时并不知道,把这些属性称为未解析的(Unresolved)。逻辑计划的分析这一步就是要处理这些未解析的属性,并使用合法性检查规则对表达式的合法性进行检查。实现层面,Spark SQL使用Catalyst逻辑计划分析规则和一个Catalog对象跟踪所有数据源中的表来解析这些属性。逻辑计划分析流程逻辑计划的分析是在QueryExecution中完成,其原创 2021-06-28 19:10:24 · 449 阅读 · 3 评论 -
SparkSQL实现原理-逻辑计划的创建
逻辑计划的创建无论通过任何方式来创建Dataset,都会在创建Dataset时生成一个QueryExecution对象和创建Dataset的逻辑计划。完成Dataset的创建后,可以对Dataset进行各种操作,SparkSQL不会立即执行这些操作,而是会根据这些操作添加对应的逻辑计划节点,从而形成逻辑计划操作树。本文介绍Dataset逻辑计划创建的实现原理。查看逻辑计划先通过一个实战的例子来查看一下创建Dataset的逻辑计划。下面的代码通过一个对象数组来创建Dataset:import spa原创 2021-06-26 09:30:48 · 369 阅读 · 0 评论 -
SparkSQL实现原理-执行计划处理的实现概要
SparkSQL执行计划处理的实现概要执行计划和对应的处理类不同阶段的处理是由不同的类来负责的,下图是各个阶段和处理类的对应关系图:(1)逻辑计划的生成:创建Dataset时会创建QueryExecution对象(2)逻辑计划的分析:通过Analyzer对象来完成(3)逻辑计划的优化:通过Optimizer来完成(4)物理计划的生成:通过Planner来完成(5)物理计划的优化:通过QueryExecution#prepareForExecution来优化物理计划(6)执行代码的生成:通过原创 2021-06-26 09:18:34 · 379 阅读 · 0 评论 -
SparkSQL实现原理-执行的总体流程
Spark SQL执行的总体流程我们知道SparkSQL最终会把API和SQL语句转换成Spark Core的RDD代码来执行。那么这个转换过程是怎样的呢?本文介绍可执行代码生成的总体流程。总体流程可执行代码的生成过程(也是使用Catalyst对表达式进行创建、优化、转换的过程)主要经历以下几个阶段:(1) 起始逻辑计划的生成(2) 使用Catalyst来分析逻辑计划,并解析引用(3) 优化逻辑计划(4) 生成一个或多个物理计划(5) 优化物理执行计划(6) 生成可执行代码在物理规划阶段原创 2021-06-25 08:21:34 · 593 阅读 · 1 评论 -
Spark SQL实现原理-项目的构成
Spark SQL的构成创建Spark SQL的目标作者希望通过Spark SQL来扩展数据关系的处理,支持更广泛的数据源。因此,制定了以下目标:使用用户友好的 API 支持 Spark 程序内(在RDD之上)和外部数据源上的关系处理。使用成熟的数据库管理系统(DBMS)技术来提供高性能。轻松支持新数据源,包括半结构化数据和适合联合查询的外部数据库。使用高级分析算法(例如:图形处理和机器学习)实现扩展。Spark SQL的访问接口Spark SQL 作为一个库运行在 Spark 之上,如原创 2021-06-24 09:19:57 · 172 阅读 · 1 评论 -
Spark Sql实战--合并数据
数据的合并概述本文介绍如何通过spark sql对数据进行各种的合并操作,包括:列合并,行合并,相同key的合并等等。在实际的数据处理场景中,数据的合并操作非常常用,这里介绍如何通过spark sql来完成常用的合并操作。数据准备例子数据准备以下数据:name,address,age,id,timedavid,shenzhen,31,1,201903eason,shenzhen,27,2,201904jarry,wuhan,35,3,201904aarry2,wuhan1,34,4原创 2020-05-23 14:46:08 · 7682 阅读 · 0 评论 -
spark2 sql原理分析--逻辑计划转换成物理计划的实现分析(SparkPlanner)
概述本文介绍介绍SparkPlanner的实现原理。SparkPlanner将优化后的逻辑执行计划转换为物理执行计划的计划器(Planner)。SparkPlanner是一个具体的Catalyst Query Planner,它使用执行计划策略( execution planning strategies)将逻辑计划转换为一个或多个物理计划,并支持额外的策略(ExperimentalMeth...原创 2020-02-22 20:22:59 · 1371 阅读 · 0 评论 -
spark2 sql原理分析--如何调试Query Execution
概述本文讲述如何调试 Query Execution(qe),qe会完成整个spark sql的全部执行计划的处理过程,直到生成rdd代码。为了更好的理解从逻辑计划到物理计划,最后生成的rdd代码,需要能够对该模块进行调试。理解spark sql的执行过程数据准备按以下csv数据格式准备数据。[hover@vm-192-168-4-141 ~]$ hadoop fs -cat /usr...原创 2020-01-20 08:22:54 · 1294 阅读 · 0 评论 -
spark2 sql原理分析—执行计划的生成和处理(QueryExecution实现概要)
概述本文分析Dataset中的执行计划的处理过程。执行计划的处理包括以下几个过程:分析逻辑执行计划->优化逻辑执行计划->生成一个或多个物理执行计划->优化物理执行计划->生成可执行代码。这个过程都是在dataset的成员:QueryExecution中完成。所以本篇,就是介绍QueryExecution的实现过程。由于QueryExecution的实现过程很多,本文...原创 2020-01-20 08:20:39 · 1994 阅读 · 0 评论