本文参考了《Spark SQL内核剖析》(朱峰、张韶全、黄明等著)的目录结构和内容,这本书主要集中在对SQL内核实现的剖析上,从源码实现上学习分布式计算和数据库领域的相关技术,非常值得有相关需求的专业人士学习和购买。我写这篇文章的目的也是基于此学习Spark SQL以及分享一些自己的理解。

什么是Spark SQL?

Spark SQL是近年来SQL-on-Hadoop解决方案(包括Hive、Presto和Impala等)中的佼佼者,结合了数据库SQL处理和Spark分布式计算模型两个方面的技术,目标是取代传统的数据仓库。

上一部分 Spark SQL内核剖析—学习(二)介绍了Spark SQL 编译器 Parser的实现方式以及Spark SQL逻辑算子树生成、分析和优化流程的技术原理和实现方式。本部分将介绍Spark SQL 物理计划的处理流程。

5. Spark SQL 物理计划(PhysicalPlan)

物理计划阶段是Spark SQL整个查询处理流程的最后一步,在此阶段Spark SQL会对生成的逻辑算子树进行进一步处理,得到物理算子树,并将LogicalPlan节点及其包含的各种信息映射成Spark Core计算模型的元素,如RDD、Transformation和Action等,以支持其提交执行。

5.1. 物理计划概述

物理计划可分为三个阶段,这三个阶段分别产生Iterator[PhysicalPlan]、SparkPlan和Prepared SparkPlan,其中Prepared SparkPlan可以直接提交并执行(这里的SparkPlan和PhysicalPlan均表示物理计划)。具体来讲,这三个阶段的工作分别如下:

  1. 有SparkPlanner将各种物理计划策略(Strategy)作用于对应的LogicalPlan节点上,生成SparkPlan列表(一个LogicalPlan可能生成多种SparkPlan)。
  2. 选取最佳的SparkPlan,在Spark2.10版本直接用next()获取第一个。
  3. 提交前准备工作,进行分区排序处理,确保SparkPlan各节点能够正确执行,这一步通过PrepareForExecution()方法调用若干规则(Rule)进行转换。

5.2. SparkPlan

在物理算子树中,叶子类型的SparkPlan节点负责创建RDD,每个非叶子类型的SparkPlan节点等价于在RDD上进行一次Transformation,即通过调用execute()函数转换新的RDD,最终执行collect()操作触发计算操作,返回结果给用户。此外,SparkPlan还有可能对RDD的分区做调整,直接调用executeBroadcast方法,将数据广播到集群上。

Spark SQL内核剖析(三)相关推荐

  1. Spark SQL join的三种实现方式

    引言 join是SQL中的常用操作,良好的表结构能够将数据分散到不同的表中,使其符合某种规范(mysql三大范式),可以最大程度的减少数据冗余,更新容错等,而建立表和表之间关系的最佳方式就是join操 ...

  2. 深入理解Spark SQL原理

    1.前言   本文是对自己阅读Spark SQL源码过程的一个记录,主线是对尚硅谷Spark SQL最后练习中建立的表的一个简单SQL编写的源码实现流程的跟读.通过自问自答的方式,学习完了整个Spar ...

  3. Spark SQL 初识

    Spark SQL 初识 今天我们们学习一下Spark 的最最核心的组件,也是Spark中代码量最大,社区花费大量精力的模块 在实际工作中,使用频率最高的当属 Spark SQL,通常一个大数据处理项 ...

  4. 元数据与数据治理|Spark SQL结构化数据分析(第六篇)

    数据科学家们早已熟悉的R和Pandas等传统数据分析框架 虽然提供了直观易用的API,却局限于单机,无法覆盖分布式大数据场景.在Spark1.3.0以Spark SQL原有的SchemaRDD为蓝本, ...

  5. hive sql 和 spark sql的区别

    目录 一.什么是hive,什么是spark (一)hive 1.hive在hadoop中的角色 2.hive和关系型数据库的区别 3.hive 架构及执行流程介绍 (二)spark 1.spark组件 ...

  6. spark sql 本地调试_Spark精华问答|Spark的三种运行模式有何区别?

    戳蓝字"CSDN云计算"关注我们哦! Spark是一个针对超大数据集合的低延迟的集群分布式计算系统,比MapReducer快40倍左右,是hadoop的升级版本,Hadoop作为第 ...

  7. hive编程指南电子版_第三篇|Spark SQL编程指南

    在<第二篇|Spark Core编程指南>一文中,对Spark的核心模块进行了讲解.本文将讨论Spark的另外一个重要模块--Spark SQL,Spark SQL是在Shark的基础之上 ...

  8. Spark SQL(三)之视图与执行SQL

    一.视图与sql执行 SparkSession能够以编程方式运行SQL查询并返回结果Dataset<Row> Dataset<Row> df = spark.read().js ...

  9. spark-sql建表语句限制_第三篇|Spark SQL编程指南

    在<第二篇|Spark Core编程指南>一文中,对Spark的核心模块进行了讲解.本文将讨论Spark的另外一个重要模块--Spark SQL,Spark SQL是在Shark的基础之上 ...

最新文章

  1. 语音识别:繁华背后,危机初现
  2. VS2010与.NET4系列 23.Visual Studio 2010 扩展管理器(和新的 VS2010 PowerComman
  3. Lync Server 2010的部署系列_第七章 部署边缘服务器(上)
  4. Java NIO系列教程(十一) Pipe
  5. docker 挂载目录_Docker容器数据管理
  6. SharePoint 2010 沙盒开发
  7. 利用StringUtils可以避免空指针问题
  8. python本地发布到服务器_使用pycharm在本地开发并实时同步到服务器
  9. router中获取vuex_Vue 中 Axios 的封装和 API 接口的管理
  10. ​​​​​​​国民经济行业分类(GB/T 4754—2017)
  11. java 群发求职邮件
  12. Jenkins插件安装
  13. 《生成式深度学习》Generative Deeping Learning 笔记 第二章 深度学习
  14. ELMAN神经网络分类和预测MATLAB程序,采用红酒数据集分类
  15. 优的python少儿编程课_优的解释|优的意思|汉典“优”字的基本解释
  16. 在Hexo博客上添加可爱的Live 2D模型
  17. mac文件夹怎么重命名?苹果电脑文件夹重命名快捷键
  18. python3-输入华氏度转化为摄氏度
  19. NBA+大数据,数字经济重塑体育帝国!
  20. (17)QBC、QBE

热门文章

  1. overleaf段落注释
  2. Vue3组件库项目基础搭建
  3. 安装FreeBSD 13.1系统及配置xfce桌面
  4. 百度AI进行人脸识别
  5. 知名大厂大数据平台搭建案例分享
  6. 一个计算机爱好者的不完整回忆(十八)鼠标
  7. 畅玩集团冲刺港股:年营收2.89亿 刘辉有53.46%投票权
  8. 安卓手机来电亮屏流程分析
  9. 看烦了VS2012的黑白调调了吗?换!(转)
  10. java 结构体拷贝_对象拷贝 - 优雅的解决方案 Mapstruct