Spark Sql 2.3源码解读
文章平均质量分 56
解读spark sql 2.3源码
sddyljsx
这个作者很懒,什么都没留下…
展开
-
spark源码编译发布
源码将项目源码clone源码到本地项目地址:https://github.com/apache/sparkgit clone git@github.com:apache/spark.git编译spark项目同时支持maven和sbt两种方式,以maven为例:最简单的编译:./build/mvn -DskipTests clean package使用 -...原创 2018-07-15 10:57:09 · 594 阅读 · 0 评论 -
spark 应用调试(idea 环境)
spark应用调试(idea 环境)spark shell可以比较方便的分步执行调试spark应用程序,但有时候不是很方便。下面介绍一种直接在idea中调试spark程序的方法。maven 新建工程 这个不多赘述,注意一点是pom文件中把依赖的spark的scope的provided去掉,因为我们要在idea中直接运行,不会用spark-submit。<d...原创 2018-07-15 18:00:01 · 1521 阅读 · 0 评论 -
spark源码开发调试(idea环境)
源码项目调试 在源代码项目对源码修改后用idea直接进行调试工作clone源码到本地并编译 git clone git@github.com:apache/spark.git ./build/mvn -DskipTests clean packageidea导入工程 Fi...原创 2018-07-15 16:15:16 · 1456 阅读 · 0 评论 -
spark sql 2.3 源码解读 - 架构概览 (1)
spark sql 的前身是shark,类似于 hive, 用户可以基于spark引擎使用sql语句对数据进行分析,而不用去编写程序代码。 上图很好的展示了spark sql的功能,提供了 jdbc,console,编程接口三种方式来操作RDD(Resilient Distributed Datasets),用户只需要编写sql即可,不需要编写程序代码。 spark s...原创 2018-08-12 15:27:43 · 2423 阅读 · 1 评论 -
spark sql 2.3 源码解读 - antlr4 && SparkSqlParser (2.1)
接着上一篇文章,本章将介绍 第1步:sql 语句经过 SqlParser 解析成 Unresolved Logical Plan 当我们执行:val sqlDF = spark.sql("SELECT name FROM people order by name") 看一下sql函数:def sql(sqlText: String): DataFrame = {...原创 2018-08-12 16:30:01 · 886 阅读 · 0 评论 -
spark sql 2.3 源码解读 - antlr4 && SparkSqlParser (2.2)
接着上一节,我们看一下antlr4。 antlr可以根据输入自动生成语法树并可视化的显示出来的开源语法分析器。ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译器(parser)和解释器(transl...原创 2018-08-12 17:28:44 · 1743 阅读 · 4 评论 -
spark sql 2.3 源码解读 - antlr4 && SparkSqlParser (2.3)
接着上一节,继续讲。还是以 SELECT A.B FROM A 为例。 查看AstBuilder逻辑,遍历访问,最终会访问到querySpecification节点:override def visitQuerySpecification( ctx: QuerySpecificationContext): LogicalPlan = withOrigin(ct...原创 2018-08-12 21:37:50 · 1013 阅读 · 0 评论 -
spark sql 2.3 源码解读 - Analyzer (3.1)
本章将介绍analyzer 结合 catalog 进行绑定,生成 Resolved Logical Plan.上一步得到的 Unresolved Logical Plan将会执行:lazy val analyzed: LogicalPlan = { print(&amp;quot;before analyzed:&amp;quot; + logical.treeString) SparkSession.setActi...原创 2018-08-13 10:04:32 · 577 阅读 · 0 评论 -
spark sql 2.3 源码解读 - Analyzer (3.2)
根据上一节所讲,Analyzer最关键的代码便是rule的实现了。先整体看一下rule的集合:lazy val batches: Seq[Batch] = Seq( Batch("Hints", fixedPoint, new ResolveHints.ResolveBroadcastHints(conf), ResolveHints.RemoveAllHints),...原创 2018-08-13 11:16:16 · 853 阅读 · 0 评论 -
spark sql 2.3 源码解读 - Optimizer (4)
得到 Resolved Logical Plan 后,将进入优化阶段。后续执行逻辑如下:// 如果缓存中有查询结果,则直接替换为缓存的结果,逻辑不复杂,这里不再展开讲了。lazy val withCachedData: LogicalPlan = { assertAnalyzed() assertSupported() sparkSession.sharedState.cache...原创 2018-08-13 18:28:34 · 731 阅读 · 0 评论 -
spark sql 2.3 源码解读 - Planner (5)
Optimizer得到的是最终的 Logical Plan,Planner 将Logical Plan 转化为 Physical Plan。planner执行plan方法:lazy val sparkPlan: SparkPlan = { SparkSession.setActiveSession(sparkSession) // TODO: We use next(), i.e....原创 2018-08-13 23:29:11 · 552 阅读 · 0 评论 -
spark sql 2.3 源码解读 - Preparations (6)
上一章生成的Physical Plan 还需要经过prepareForExecution这一步,做执行前的一些准备工作,代码如下:/ executedPlan should not be used to initialize any SparkPlan. It should be// only used for execution.lazy val executedPlan: SparkP...原创 2018-08-16 00:40:50 · 634 阅读 · 0 评论 -
spark sql 2.3 源码解读 - Execute (7)
终于到了最后一步执行了:/** Internal version of the RDD. Avoids copies and has no schema */lazy val toRdd: RDD[InternalRow] = executedPlan.execute()final def execute(): RDD[InternalRow] = executeQuery { ...原创 2018-08-16 00:41:38 · 1035 阅读 · 0 评论 -
spark sql 2.3 源码解读 - whole stage codegen (8)
whole stage codegen 是spark 2.0 以后引入的新特性,所以在最后单独把这一块拿出来讲一下。相关背景可以看spark官方的jira:https://issues.apache.org/jira/browse/SPARK-12795awhole stage codegen对性能有很大的提升。如下图所示,将一课树翻译成了一段代码执行,性能肯定会大幅提升。co...原创 2018-08-18 00:58:59 · 4070 阅读 · 1 评论