排查过程:在EMR集群上按小时跑的spark sql 任务有时会失败,在driver端的日志中可以看到报错: org.apache.spark.sql.catalyst.errors.package$TreeNodeException...图片查看错误栈对应的代码 org.apache.spark.sql.execution.exchange.BroadcastExchangeExec....org.apache.spark.sql.execution.exchange.BroadcastExchangeExec....$anonfun$relationFuture$1(BroadcastExchangeExec.scala:169)at org.apache.spark.sql.execution.SQLExecution.../spark/blob/branch-3.0/sql/core/src/main/scala/org/apache/spark/sql/execution/exchange/BroadcastExchangeExec.scala
后续将持续更新 Spark SQL 架构 Spark SQL 的整体架构如下图所示 [Spark SQL Catalyst] 从上图可见,无论是直接使用 SQL 语句还是使用 DataFrame,都会经过如下步骤转换成...] Analyzer 分析前后的 LogicalPlan 对比如下 [Spark SQL Analyzer] 由上图可见,分析后,每张表对应的字段集,字段类型,数据存储位置都已确定。...为了尽可能保证无论用户是否熟悉 SQL 优化,提交的 SQL 质量如何, Spark SQL 都能以较高效率执行,还需在执行前进行 LogicalPlan 优化。...[Spark SQL RBO Column Pruning] 这里需要说明的是,此处的优化是逻辑上的优化。...[Spark SQL RBO Column Pruning] 至此,一条 SQL 从提交到解析、分析、优化以及执行的完整过程就介绍完毕。 本文介绍的 Optimizer 属于 RBO,实现简单有效。
本文转发自技术世界,原文链接 http://www.jasongj.com/spark/rbo/ 本文所述内容均基于 2018年9月10日 Spark 最新 Release 2.3.1 版本。...后续将持续更新 Spark SQL 架构 Spark SQL 的整体架构如下图所示 ?...以 DAG 的方法执行上述 Physical Plan 在执行 DAG 的过程中,Adaptive Execution 根据运行时信息动态调整执行计划从而提高执行效率 Parser Spark SQL...为了尽可能保证无论用户是否熟悉 SQL 优化,提交的 SQL 质量如何, Spark SQL 都能以较高效率执行,还需在执行前进行 LogicalPlan 优化。...Optimizer Spark SQL 目前的优化主要是基于规则的优化,即 RBO (Rule-based optimization) 每个优化以 Rule 的形式存在,每条 Rule 都是对 Analyzed
Reference Overview Spark SQL的核心是Catalyst优化器,是以一种新颖的方式利用Scala的的模式匹配和quasiquotes机制来构建的可扩展查询优化器。 ?...Spark2.x SQL语句的解析采用的是ANTLR4,ANTLR4根据语法文件SqlBase.g4自动解析生成两个Java类:词法解析器SqlBaseLexer和语法解析器SqlBaseParser。...使用这两个解析器将SQL字符串语句解析成了ANTLR4的ParseTree语法树结构。...词义注入 //org.apache.spark.sql.catalyst.analysis.Analyzer.scala lazy val batches: Seq[Batch] = Seq( //...不需要people.address,那么可以将address字段丢弃 //@see http://blog.csdn.net/oopsoom/article/details/38121259 //org.apache.spark.sql.catalyst.optimizer.Optimizer.scala
package wang.datahub.parser import org.apache.spark.sql.catalyst.analysis.UnresolvedStar import org.apache.spark.sql.catalyst.expressions.Expression...import org.apache.spark.sql.catalyst.parser.ParserInterface import org.apache.spark.sql.catalyst.plans.logical...{LogicalPlan, Project} import org.apache.spark.sql.catalyst....import org.apache.spark.sql.catalyst.expressions....{Add, Expression, Literal} import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.catalyst.rules.Rule
我们写的sql语句只是一个字符串而已,首先需要将其通过词法解析和语法解析生成语法树,Spark1.x版本使用的是scala原生的parser语法解析器,从2.x后改用的是第三方语法解析工具ANTLR4,...antlr4的使用需要定义一个语法文件,sparksql的语法文件的路径在sql/catalyst/src/main/antlr4/org/apache/spark/sql/catalyst/parser.../SqlBase.g4 antlr可以使用插件自动生成词法解析和语法解析代码,在SparkSQL中词法解析器SqlBaseLexer和语法解析器SqlBaseParser,遍历节点有两种模式Listener...然后在parsePlan中,使用AstBuilder将ANTLR 4语法树结构转换成catalyst表达式逻辑计划logical plan。...[4]") .getOrCreate() spark.sql("select * from table").show(false) --- // 代码2 def sql(sqlText:
随着Spark SQL和Apache Spark effort(HIVE-7292)上新Hive的引入,我们被问到了很多关于我们在这两个项目中的地位以及它们与Shark的关系。...对于SQL用户,Spark SQL提供了最先进的SQL性能并保持与Shark / Hive的兼容性。...有了将在Apache Spark 1.1.0中引入的功能,Spark SQL在TPC-DS性能上击败Shark几乎一个数量级。...Hiveon Spark项目(HIVE-7292) 虽然Spark SQL正在成为SQL on Spark的标准,但我们意识到许多组织已经在Hive上进行了投资。...总之,我们坚信Spark SQL不仅是SQL的未来,而且还是在Spark上的结构化数据处理的未来。我们会努力工作,将在接下来的几个版本中为您带来更多体验。
$class.failAnalysis(CheckAnalysis.scala:42) at org.apache.spark.sql.catalyst.analysis.Analyzer.failAnalysis...(Analyzer.scala:95) at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1...$1.apply(CheckAnalysis.scala:85) at org.apache.spark.sql.catalyst.trees.TreeNode.foreachUp(TreeNode.scala...:127) at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$class.checkAnalysis(CheckAnalysis.scala...问题分析 根据报错信息,我们查看org.apache.spark.sql.catalyst.analysis.CheckAnalysis的checkAnalysis方法,第362行源码处理逻辑(错误信息是不是很熟悉呢
:70) at org.apache.spark.sql.catalyst.trees.TreeNode.transformDown(TreeNode.scala:266) at org.apache.spark.sql.catalyst.trees.TreeNode...) at org.apache.spark.sql.catalyst.trees.TreeNode.transformDown(TreeNode.scala:272) at org.apache.spark.sql.catalyst.trees.TreeNode...) at org.apache.spark.sql.catalyst.trees.TreeNode.transformDown(TreeNode.scala:272) at org.apache.spark.sql.catalyst.trees.TreeNode...) at org.apache.spark.sql.catalyst.trees.TreeNode.transformDown(TreeNode.scala:272) at org.apache.spark.sql.catalyst.trees.TreeNode...) at org.apache.spark.sql.catalyst.trees.TreeNode.transformDown(TreeNode.scala:272) at org.apache.spark.sql.catalyst.trees.TreeNode
摘要 社区小伙伴一直期待的Hudi整合Spark SQL的[HUDI-1659](https://github.com/apache/hudi/pull/2645)正在积极Review中并已经快接近尾声...,Hudi集成Spark SQL预计会在下个版本正式发布,在集成Spark SQL后,会极大方便用户对Hudi表的DDL/DML操作,下面来看看如何使用Spark SQL操作Hudi表。...环境准备 首先需要将[HUDI-1659](https://github.com/apache/hudi/pull/2645)拉取到本地打包,生成SPARK_BUNDLE_JAR(hudi-spark-bundle..._2.11-0.9.0-SNAPSHOT.jar)包 2.1 启动spark-sql 在配置完spark环境后可通过如下命令启动spark-sql spark-sql --jars $PATH_TO_SPARK_BUNDLE_JAR...--conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension
---- 本文目录 一、Apache Spark 二、Spark SQL发展历程 三、Spark SQL底层执行原理 四、Catalyst 的两大优化 传送门:Hive SQL底层执行过程详细剖析 一...、Apache Spark Apache Spark是用于大规模数据处理的统一分析引擎,基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量硬件之上...SparkSQL-DataFrame诞生 解决问题: Spark SQL 执行计划和优化交给优化器 Catalyst; 内建了一套简单的 SQL 解析器,可以不使用 HQL; 还引入和 DataFrame...三、Spark SQL底层执行原理 Spark SQL 底层架构大致如下: 可以看到,我们写的SQL语句,经过一个优化器(Catalyst),转化为RDD,交给集群执行。...SQL到RDD中间经过了一个Catalyst,它就是Spark SQL的核心,是针对Spark SQL语句执行过程中的查询优化框架,基于Scala函数式编程结构。
但是当利用Spark SQL处理数据生成的DataSet/DataFrame进行collect或者show等操作时,抛出以下异常信息: in stage 3.0 (TID 403, localhost,...:37) at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:408) at org.apache.spark.sql.catalyst.expressions.GeneratedClass...$GeneratedIteratorForCodegenStage2.agg_doAggregateWithKeys_0$(Unknown Source) at org.apache.spark.sql.catalyst.expressions.GeneratedClass...(BufferedRowIterator.java:43) at org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$13$$anon...$1.hasNext(WholeStageCodegenExec.scala:636) at org.apache.spark.sql.execution.SparkPlan$$anonfun$2.apply
`train` at org.apache.spark.sql.catalyst.analysis.package$AnalysisErrorAt.failAnalysis(package.scala...:42) at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1.apply(CheckAnalysis.scala...:67) at org.apache.spark.sql.catalyst.trees.TreeNode.foreachUp(TreeNode.scala:128) at org.apache.spark.sql.catalyst.trees.TreeNode...$$anonfun$foreachUp$1.apply(TreeNode.scala:127) at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun...:67) at org.apache.spark.sql.catalyst.analysis.Analyzer.checkAnalysis(Analyzer.scala:57) at org.apache.spark.sql.execution.QueryExecution.assertAnalyzed
ANTLR4 的应用场景 Apache Spark: 流行的大数据处理框架,使用ANTLR作为其SQL解析器的一部分,支持SQL查询。...三、SparkSQL介绍 Spark SQL 是 Apache Spark 的一个模块,专门用于处理结构化数据,Spark SQL 的特点包括: 高效的查询执行:通过 Catalyst 优化器和 Tungsten...Lexer.g4 https://github.com/apache/spark/blob/master/sql/api/src/main/antlr4/org/apache/spark/sql/catalyst.../org/apache/spark/sql/catalyst/parser/SqlBaseParser.g4 语法补全 以下我们以字段补全场景为例解析从语法定义,语法解析,语法补全,上下文信息采集各个流程节点剖析最后完成的表字段信息精准推荐...1、异常捕获 ANRLT自动生成的语法解析器中自动为每个规则包裹异常捕获能力,并在catch中尝试错误恢复。
Spark SQL的前身是Shark,它发布时Hive可以说是SQL on Hadoop的唯一选择(Hive负责将SQL编译成可扩展的MapReduce作业),鉴于Hive的性能以及与Spark的兼容,...SparkSQL模块主要将以前依赖Hive框架代码实现的功能自己实现,称为Catalyst引擎。...Catalyst: SQL翻译器 SparkSQL 模块 从Spark框架1.0开始发布SparkSQL模块开发,直到1.3版本发布SparkSQL Release版本可以在生产环境使用,此时数据结构为...1)、解决的问题 Spark SQL 执行计划和优化交给优化器 Catalyst; 内建了一套简单的SQL解析器,可以不使用HQL; 还引入和 DataFrame 这样的DSL API,完全可以不依赖任何...SparkSQL模块官方文档:http://spark.apache.org/docs/2.4.5/sql-programming-guide.html
org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$3.apply(TreeNode.scala:277) at org.apache.spark.sql.catalyst.trees.TreeNode...) at org.apache.spark.sql.catalyst.trees.TreeNode.transformUp(TreeNode.scala:277) at org.apache.spark.sql.catalyst.trees.TreeNode...apply(TreeNode.scala:277) at org.apache.spark.sql.catalyst.trees.TreeNode.org$apache$spark$sql$catalyst...) at org.apache.spark.sql.catalyst.trees.TreeNode.transformUp(TreeNode.scala:277) at org.apache.spark.sql.catalyst.trees.TreeNode...at org.apache.spark.sql.catalyst.trees.TreeNode.mapChildren(TreeNode.scala:326) at org.apache.spark.sql.catalyst.trees.TreeNode.transformUp
Catalyst的出现意味着开始丢弃MapReduce风格的作业执行,而是可以构建和运行Spark优化的执行计划。...(在开发过程中有一段时间你必须在HiveContext和SqlContext之间进行选择,两者都有不同的解析器,但我们不再讨论它了。今天所有请求都以SparkSession开头)。...参考:http://spark.apache.org/docs/latest/sql-distributed-sql-engine.html#running-the-thrift-jdbcodbc-server...参考: https://issues.apache.org/jira/browse/SPARK-5159https://issues.apache.org/jira/browse/SPARK-11248https...://issues.apache.org/jira/browse/SPARK-21918 2.因为上述第一点不支持用户模拟,导致任何查询都是同一个用户,所有没办法控制Spark SQL的权限。
import org.apache.spark.sql.expressions.UserDefinedAggregateFunction import org.apache.spark.sql.types...._ import org.apache.spark.sql.Row import org.apache.spark.sql.SparkSession object MyAverage extends...import org.apache.spark.sql.Encoder import org.apache.spark.sql.Encoders import org.apache.spark.sql.SparkSession...当使用 DSL 内部的函数时(现在使用 DataFrame API 来替换), 用户习惯导入 org.apache.spark.sql.catalyst.dsl....开发人员应改为导入类 org.apache.spark.sql.types。
$1.applyOrElse(QueryExecution.scala:94) at org.apache.spark.sql.catalyst.trees.TreeNode....(TreeNode.scala:584) at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.org$apache$spark...at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper.transformDownWithPruning(AnalysisHelper.scala...:267) at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper.transformDownWithPruning$...(LogicalPlan.scala:30) at org.apache.spark.sql.catalyst.trees.TreeNode.transformDown(TreeNode.scala
Spark SQL作为Spark当中的结构化数据处理模块,在数据价值挖掘的环节上,备受重用。自Spark SQL出现之后,坊间甚至时有传言,Spark SQL将取代Hive,足见业内对其的推崇。...今天的大数据开发学习分享,我们就来讲讲Spark SQL数据处理模块。...组件扩展:SQL 语法解析器、分析器、优化器均可重新定义。 性能优化:内存列存储、动态字节码生成等优化技术,内存缓存数据。 多语言支持:Scala、Java、Python、R。...Spark SQL原理及组成 Catalyst 优化: 优化处理查询语句的整个过程,包括解析、绑定、优化、物理计划等,主要由关系代数(relation algebra)、表达式(expression)以及查询优化...Spark SQL执行流程 SqlParser 对 SQL 语句解析,生成 Unresolved 逻辑计划(未提取 Schema 信息); Catalyst 分析器结合数据字典(catalog)进行绑定
领取专属 10元无门槛券
手把手带您无忧上云