WHAT CacheManager 是 Spark SQL 中内存缓存的管理者,在 Spark SQL 中提供对缓存查询结果的支持,并在执行后续查询时自动使用这些缓存结果。...数据使用 InMemoryRelation 中存储的字节缓冲区进行缓存。 这个关系是自动替换的查询计划,逻辑计划返回与最初缓存的查询相同的结果。...通过在 Spark 的 conf/log4j.properties 添加下面的配置可以查看 CacheManager 内部发生了什么?...log4j.logger.org.apache.spark.sql.execution.CacheManager=ALL 在触发缓存并且日志打印级别符合的情况下,会出现下面的打印日志: Asked to...优化过的物理查询计划 (在请求 SessionState 执行 analyzed logical plan 之后)。 输入的表名。 analyzed 查询计划的统计信息。 怎么判断查询是否已缓存?
做逻辑执行计划做优化,这步在下面单独介绍。 把逻辑执行计划转换成可以在机器上运行的物理计划。 对于Hive来说,就是MR/Tez Job等; 对于Impala来说,就是plan fragment。...物理计划中的一个计算单元(或者说Job),由“输入,处理,输出”三要素组成,而逻辑执行计划中的operator相对粒度更细,一个逻辑操作符一般处于这三要素之一的角色。...count(1) from status_updates where ds = '2009-08-01' Hive_compile 2.2.2 Presto 引用自美团技术团队,其中SubPlan就是物理计划的一个计算单元...如下图中所示从SQL编译为最终的物理执行计划大概分为5部,最终生成在每个Worker节点上运行的LocalExecutionPlan。...物理执行计划 逻辑执行计划图中的虚线就是Presto对逻辑执行计划的切分点,逻辑计划Plan生成的SubPlan分为四个部分,每一个SubPlan都会提交到一个或者多个Worker节点上执行。
):将逻辑执行计划转成可执行的物理计划,如MR/Spark CLI:command line interface,命令行接口。...Hive的工作流程步骤: ExecuteQuery(执行查询操作):命令行或Web UI之类的Hive接口将查询发送给Driver(任何数据驱动程序,如JDBC、ODBC等)执行; GetPlan(获取计划任务...; 语义解析: 遍历 AST Tree,抽象出查询的基本组成单元 QueryBlock; 生成逻辑执行计划: 遍历 QueryBlock,翻译为执行操作树 OperatorTree; 优化逻辑执行计划:...,翻译为 MapReduce 任务; 优化物理执行计划: 物理层优化器进行 MapReduce 任务的变换,生成最终的执行计划。...大概的原理是: 通过SparkSql,加载Hive的配置文件,获取到Hive的元数据信息 通过SparkSql获取到Hive的元数据信息之后就可以拿到Hive的所有表的数据 接下来就可以通过通过SparkSql
:Push模式将消息推给Broker; Consumer:Pull模式将消息从Broker中拉回来; Topic:要传递的消息,有由Kafka集群负责分发; Partition:topic上的物理分组,...5、Region虽然是分布式存储的最小单元,但并不是存储的最小单元。...Spark的核心是RDD(Resilient Distributed Datasets,弹性分布式数据集),是分布式数据的逻辑抽象,物理数据存储在不同节点,但对用户是透明的。...:driver运行的位置,client就是运行在本地,会在本地打印日志;cluster表示运行在集群上,运行信息会打印在spark日志中; --class:主类类名,含包名。...Plugin读取存储的元数据,根据元数据生成生成一个查询计划,计划的生成是基于一个有向无环图(DAG),采用流水线的方式将SQL任务转换成多个stage,根据SQL将任务分发给各个Worker; Worker
即如果某个节点上的RDD partition,因为节点故障,导致数据丢了,那么RDD会自动通过自己的数据来源重新计算该partition。...之所以需要Shuffle,还是因为具有某种共同特征的一类数据需要最终汇聚(aggregate)到一个计算节点上进行计算。这些数据分布在各个存储节点上并且由不同节点的计算单元处理。...Spark SQL的查询计划首先起始于由SQL解析器返回的AST,或者是由API构建的DataFrame对象。...物理计划 Optimized Logical Plan -->physical Plan。...在物理计划阶段,Spark SQL会将优化的逻辑计划生成多个物理执行计划,然后使用Cost Model计算每个物理计划的成本,最终选择一个物理计划。
2 Spark SQL 特点 Spark SQL 有以下特点: 和 Spark Core 的无缝集成,可以在写整个 RDD 应用程序时,配置 Spark SQL 来完成逻辑实现。...Catalyst:负责处理查询语句的整个执行过程,包括解析、绑定、优化、生成物理计划等。 Hive:负责对 Hive 数据的处理。...使用 SparkPlanner 生成可执行计划的物理计划 SparkPlanner 使用 Planning Strategies,对优化的逻辑计划进行转换,生成可以执行的物理计划(Physical Plan...根据过去的性能统计数据,选择最佳的物理执行计划 Cost Model,最后生成可以执行的物理执行计划树,得到 SparkPlan。...使用 execute 执行物理计划 在最终真正执行物理执行计划之前,还要进行 Preparations 规则处理,最后调用 SparkPlan 的 execute(),执行物理计划计算 RDD。
由于Spark作业调度是抢占式的,E x C个并发任务执行单元会抢占执行P个任务,“能者多劳”,直至所有任务完成,则进入到下一个Stage。...挑战2:Spark SQL最佳执行计划 Spark SQL在执行SQL之前,会将SQL或者Dataset程序解析成逻辑计划,然后经历一系列的优化,最后确定一个可执行的物理计划。...最终选择的物理计划的不同对性能有很大的影响。如何选择最佳的执行计划,这便是Spark SQL的Catalyst优化器的核心工作。...自适应执行架构 在Spark SQL中,当Spark确定最后的物理执行计划后,根据每一个operator对RDD的转换定义,它会生成一个RDD的DAG图。...最后我们在TPC-DS 100TB数据集上验证了自适应执行的优势,相比较原版Spark SQL,103个SQL查询中,90%的查询都得到了明显的性能提升,最大的提升达到3.8倍,并且原先失败的5个查询在自适应执行下也顺利完成
驱动器节点driver的职责: 把用户程序转为任务task(driver) Spark驱动器程序负责把用户程序转化为多个物理执行单元,这些单元也被称之为任务task(详解见备注) 为执行器节点调度任务...(executor) 有了物理计划之后,Spark驱动器在各个执行器节点进程间协调任务的调度。...当驱动器程序执行时,它会把这个逻辑图转为物理执行计划。 这样 Spark就把逻辑计划转为一系列步骤(stage),而每个步骤又由多个任务组成。这些任务会被打包送到集群中。...如果是spark-hive项目,那么读取metadata信息作为Schema、读取hdfs上数据的过程交给Hive完成,然后根据这俩部分生成SchemaRDD,在HiveContext下进行hql()查询...要把Spark SQL连接已有的hive上,需要提供Hive的配置文件。hive-site.xml文件复制到spark的conf文件夹下。
,该元数据用于对查询树中的表达式进行类型检查,以及基于查询谓词修建分区; 步骤5:编译器生成的计划是分阶段的DAG,每个阶段要么是 map/reduce 作业,要么是一个元数据或者HDFS上的操作。...语义解析: 遍历 AST Tree,抽象出查询的基本组成单元 QueryBlock; 生成逻辑执行计划: 遍历 QueryBlock,翻译为执行操作树 OperatorTree; 优化逻辑执行计划: 逻辑层优化器进行...任务; 优化物理执行计划: 物理层优化器进行 MapReduce 任务的变换,生成最终的执行计划。...Join倾斜 阶段五:生成物理执行计划 生成物理执行计划即是将逻辑执行计划生成的OperatorTree转化为MapReduce Job的过程,主要分为下面几个阶段: 对输出表生成MoveTask 从OperatorTree...还会注意到,如果再次运行相同的查询,它的完成速度比第一个快得多。 Spark执行程序需要额外的时间来启动和初始化yarn上的Spark,这会导致较长的延迟。
驱动器节点driver的职责: 1、把用户程序转为任务task(driver) Spark驱动器程序负责把用户程序转化为多个物理执行单元,这些单元也被称之为任务task(详解见备注) 2、为执行器节点调度任务...(executor) 有了物理计划之后,Spark驱动器在各个执行器节点进程间协调任务的调度。...当驱动器程序执行时,它会把这个逻辑图转为物理执行计划。 这样 Spark就把逻辑计划转为一系列步骤(stage),而每个步骤又由多个任务组成。这些任务会被打爆送到集群中。...如果是spark-hive项目,那么读取metadata信息作为Schema、读取hdfs上数据的过程交给Hive完成,然后根据这俩部分生成SchemaRDD,在HiveContext下进行hql()查询...要把Spark SQL连接已有的hive上,需要提供Hive的配置文件。hive-site.xml文件复制到spark的conf文件夹下。
总的来说,Hive on Spark的设计思路,是重用Hive逻辑层面的功能,从生成物理计划开始,提供一整套针对Spark的实现,比如SparkCompiler、SparkTask等,最终实现Hive查询作为...本质上,Hive的表和Spark的HadoopRDD都是HDFS上的一组文件,通过InputFormat和RecordReader读取其中的数据,因此这个转化是自然而然的。...③使用Hive原语 这里主要是指使用Hive的操作符对数据进行处理。通过将Hive的操作符包装为Function,然后应用到RDD上。...④物理执行计划 通过SparkCompiler将Operator Tree转换为Task Tree,其中需要提交给Spark执行的任务即为SparkTask。...我们可以使用Spark提供的Accumulator来实现该功能。 ⑦测试 除了一般的单元测试以外,Hive还提供了Qfile Test,即运行一些事先定义的查询,并根据结果判断测试是否通过。
编译器 - 解析查询的组件,对不同的查询块和查询表达式进行语义分析,最终通过从metastore获取表和分区的信息生成执行计划。...执行引擎 - 执行编译器创建的执行计划的组件。该计划是一个stages的DAG。执行引擎管理计划的这些不同阶段之间的依赖关系,并在适当的系统组件上执行这些阶段。...从这个意义上讲,提供了使用hive扩展和集成外部功能的能力。换句话说,Hive hadoop可用于在查询处理的各个步骤中运行/注入一些代码。...请注意,这个目的是此时已经为Hive准备了一个优化的查询计划。...创建并验证物理查询计划。
Abstract Syntax Tree,查询语法树) 接着,Planner组件根据AST生成执行计划 Optimizer进一步优化执行计划 要完成这一系列的动作,Hive须拿到相关数据表的元信息,如表名...将配置好hive.metastore.uris参数的hive-site.xml文件放到Spark安装目录的conf下,我们即可在spark-sql中直接使用SQL语句来查询或是处理Hive表。...在第14讲我们提过,借助于Catalyst与Tungsten这对“左膀右臂”,Spark SQL对SQL查询语句先后进行语法解析、语法树构建、逻辑优化、物理优化、数据结构优化、以及执行代码优化,等等。...配置好这3个参数之后,我们就可以用Hive SQL向Hive提交查询请求,而Hive则是先通过访问Metastore在Driver端完成执行计划的制定与优化,然后再将其“翻译”为RDD语义下的DAG,最后把...不仅如此,在第12讲,我们详细介绍了Spark自身的基础配置项,这些配置项都可以配置到hive-site.xml中,方便你更细粒度地控制Hive与Spark之间的集成。
平台计划将 Hive 任务迁移到 Spark SQL 上,同时也需要实现字段血缘的功能。...二、前期调研 开发前我们做了很多相关调研,从中得知 Spark 是支持扩展的:允许用户对 Spark SQL 的 SQL 解析、逻辑计划的分析和检查、逻辑计划的优化、物理计划的形成等进行扩展。...当初我们考虑的时候,物理计划拿取字段关系的时候是比较准的,且链路比较短也更直接。...;经过Optimizer 后逻辑计划会根据既定规则被优化,这里的规则是RBO,当然 Spark 还支持CBO的优化;经过SparkPlanner后就成了可执行的物理计划。...,最终得到了物理计划。
Spark SQL 的核心是Catalyst优化器,首先将SQL处理成未优化过的逻辑计划(Unresolved Logical Plan),其只包括数据结构,不包含任何数据信息。...然后通过解析,形成解析后的逻辑计划([Analyzed] Logical Plan),这里节点上就会绑定各种信息。...逻辑计划之后,会进行物理执行就计划,物理计划阶段会将逻辑计划生成的子树进行进一步转化生成物理算子树,物理算子树上的节点会直接生成RDD或对RDD进行转化(transformation/execute)操作...生成的物理执行计划与直接执行RDD程序相似。 ? Flink SQL 是Fllink提供的SQL的SDK API。...都只是进行了数据的简单查询,和打印。
RDD的最小单元,RDD是由分布在各个节点上的partion组成的。...③ 生成物理执行计划:接下来,Spark SQL 会根据优化后的逻辑执行计划生成物理执行计划(Physical Plan)。...物理执行计划通常是一组 Spark RDD 转换操作,它们对应于逻辑计划中的不同操作。 ...④ 生成任务(Task):Spark SQL 将物理执行计划转换为一组具体的任务(Task),这些任务被分配到不同的 Executor 上并在分布式集群上运行。 ...然后,Spark 将逻辑执行计划转换为物理执行计划,即一个由 Spark 作业组成的 DAG。在这个过程中,Spark 会利用 Hive 的元数据存储和查询优化功能,来优化 SQL 查询的执行计划。
而言,最重要的问题就是什么时候去重新计算优化执行计划。...在查询开始时,生成完了执行计划,AQE框架首先会找到并执行那些不存在上游的stages。...DPP背后的想法是将维度表上的筛选器集直接应用到事实表上,以便跳过扫描不需要的分区。DPP的优化是在逻辑计划优化和物理计划上实现的。...a)Spark 3.0可以自动在YARN集群上发现GPU,并将任务调度到指定的GPU节点。...8.Kafka connector delegation token (0.10+) a)对应用只需要配置Spark的参数就可以完成认证登录,而不是非需要使用JAAS配置登录。
Shark的诞生 所以Spark在早期版本(1.0之前)推出了Shark,这是什么东西呢,Shark与Hive实际上还是紧密关联的,Shark底层很多东西还是依赖于Hive,但是修改了内存管理、物理计划...SparkPlanner模块:转化为物理执行计划 根据上面的步骤,逻辑执行计划已经得到了比较完善的优化,然而,逻辑执行计划依然没办法真正执行,他们只是逻辑上可行,实际上Spark并不知道如何去执行这个东西...此时就需要将逻辑执行计划转化为物理执行计划,也就是将逻辑上可行的执行计划变为Spark可以真正执行的计划。...比如join算子,Spark根据不同场景为该算子制定了不同的算法策略,有BroadcastHashJoin、ShuffleHashJoin以及SortMergejoin等,物理执行计划实际上就是在这些具体实现中挑选一个耗时最小的算法实现...,怎么挑选,下面简单说下: 实际上SparkPlanner对优化后的逻辑计划进行转换,是生成了多个可以执行的物理计划Physical Plan; 接着CBO(基于代价优化)优化策略会根据Cost Model
Spark SQL作为Spark当中的结构化数据处理模块,在数据价值挖掘的环节上,备受重用。自Spark SQL出现之后,坊间甚至时有传言,Spark SQL将取代Hive,足见业内对其的推崇。...Spark SQL原理及组成 Catalyst 优化: 优化处理查询语句的整个过程,包括解析、绑定、优化、物理计划等,主要由关系代数(relation algebra)、表达式(expression)以及查询优化...Spark SQL 内核: 处理数据的输入输出,从不同数据源(结构化数据 Parquet 文件 JSON 文件、Hive 表、外部数据库、已有 RDD)获取数据,执行查询(expression of queries...逻辑计划; 与 Spark Planner 交互,应用策略(strategy)到 plan,使用 Spark Planner 将逻辑计划转换成物理计划,然后调用 next 函数,生成可执行物理计划。...动态代码和字节码生成技术:提升重复表达式求值查询的速率。 Tungsten 优化: 由 Spark 自己管理内存而不是 JVM,避免了 JVM GC 带来的性能损失。
领取专属 10元无门槛券
手把手带您无忧上云